2011-11-30 32 views
2

所以我在C以下枚舉方法:C-編程:收到的數據被寫入到指針

enum enum_type GetInfo (int socket, unsigned char *data) 
{ 
} 

和在API我能找到這樣的:

接收的數據被寫入到指針*數據....

所以,如果我做這樣的事情:

unsigned char *data; 
enum_type enum1; 

enum1 = GetInfo (int socket, data); 

我得到一個分段錯誤。

我的問題是什麼?

感謝, 西蒙

+4

格式化您的代碼。 – Beginner

+0

問題是數據不是**寫入指針。它被寫入指針指向的對象,但是你的指針並不指向任何東西。 –

+0

@羅曼:他也應該修正編譯錯誤。 – JeremyP

回答

3

你的問題是,你還沒有分配的空間data但要儘量寫它。做

unsigned char *data = malloc(sizeof(unsigned char) * MYBUFLENGTH); 

然後將數據傳遞給GetInfo。在最後不要忘了

free(data); 

或者你可以在棧上分配空間(可在C99,一些編譯器支持它作爲擴展名,甚至與早期版本的C標準)

unsigned char data[MYBUFLENGTH]; 

在這你不應該擔心內存管理。

2

您需要分配內存來存儲數據 例如:

unsigned char data[10000]; /* allocate 10000 bytes */ 

enum_type enum1; 
enum1 = GetInfo(socket, data); 

如果你不明白這是怎麼回事,我建議花時間對pointers閱讀起來。

1

不知道的信息有多大,但請嘗試以下

unsigned char data[512] = {0}; 
enum_type enum1; 

enum1 = GetInfo (socket, data); 

這樣可以確保,數據指向棧上的有效的內存地址。

0

也許是因爲GetInfo想要寫入data所指向的緩衝區,並且只傳遞指針而不分配任何內存空間。分配內存並將其指向data像這樣:

// I assume you need 1000 bytes 
data = (unsigned char*)malloc(1000*sizeof(unsigned char)); 
+0

你沒見過C標籤嗎?新來自C++。 – Beginner

+0

刪除了C++部分 – saeedn