2015-06-29 29 views
-1

我有一個結構定義爲如何初始化結構中的數組?

struct new{ 
    int x; 
    int y; 
    unsigned char *array; 
}; 

在我想要陣列是被初始化的動態基於用戶輸入陣列。內部主要功能:

struct new *sbi; 
sbi->array = (unsigned char*)malloc(16 * sizeof(unsigned char)); 

     for(i=0; i<16; i++) 
     { 
      sbi->array[i] = 0; 
     } 

     for(i=0; i<16; i++) 
     printf("Data in array = %u\n", (unsigned int)sbi->array[i]); 

我相信我做錯了什麼用malloc的,但我沒有得到它 - 它只是不斷給分段錯誤。

+2

'sbi'指向'malloc'之前的位置?在你的代碼片段中,'sbi'沒有被初始化或賦值。 – pmg

+1

也是'new'是C++中的關鍵字。如果您的代碼有機會翻譯成該語言,您可能需要避免使用該標識符:-) – pmg

+0

標題應爲「如何初始化指向結構的指針?」 – Elyasin

回答

2

你聲明sbi是一個指向結構體new的指針,但是決不會爲它分配內存。試試這個:

struct new *sbi; 
sbi = malloc(sizeof(struct new)); 

另外,不要投malloc的結果,因爲這可能會掩蓋其他錯誤,並且不要忘記檢查的malloc的返回值。

+0

請檢查'malloc()'的返回值。 –

+0

@OP:不要忘了釋放後的內存。 – rost0031