2014-02-27 215 views
0
typedef struct _X 
{ 
    int a; 
    int b; 
}X; 

X** arrayOfXPointers; 
arrayOfXPointers = malloc(10 * sizeof(X*)); 

我有類似上面顯示的代碼。 我知道我必須分配個別的arrayOfXPointers數組元素。
我的問題是,在我這樣做之前,將​​,arrayOfXPointers[1]等空或指向一些垃圾值。
分配一個結構指針陣列

如何檢查一個單獨的數組元素是否已被先前分配或假定它的值可能是垃圾。有沒有辦法動態初始化所有的數組元素爲空?


從使用calloc的答案似乎是最好的選擇,但不是由C標準

其中浮現在腦海另一個想法,正在運行的循環和分配arrayOfXPointers[i]保證是NULL
是還有其他更好的便攜式方法嗎?

+0

它是一個指針,但它取決於你聲明它的位置,默認情況下全局變量爲零初始化 –

+0

更好地使用'calloc'或'malloc + memset' ... – anishsane

+1

@DavidKernin'arrayOfXPointers'指向內存段由'malloc()'分配,內容可以是任何東西。 –

回答

0

我的問題是,在我這樣做之前,arrayOfXPointers [0],arrayOfXPointers [1]等是null或指向一些垃圾值。

它們可能是NULL,可能有垃圾值,也可能是兩者的混合。

我如何檢查是否一個獨立的數組元素爲空或不是

喜歡的東西if (arrayOfXPointers[0] == NULL)應該夠了。

2

它會在內存中有垃圾。 要檢查指針是否爲NULL,請執行以下操作: if (pointer==NULL)或更多地方if (!pointer)

1

malloc()手冊頁。

malloc()函數分配大小字節並返回指向已分配內存的指針。 內存未初始化。所以它可能是NULL或一些垃圾值。如果你關心的內容爲NULL,calloc()是更好的選擇。

2

當你使用malloc數組的元素將有一些垃圾值。如果你想讓它們成爲NULL,你可以使用calloc,而實際上它是malloc + memset,它初始化分配的內存塊。

編輯: 作爲@rmartinjak提到的,標準並不保證所有位歸零,但它是由大多數C標準庫的實現

定義爲((void *)0)爲了檢查是否NULL會代表一個獨立的數組元素爲空或不是你只是檢查

if (arrayOfXPointers[0] == NULL) 

BTW NULL定義爲<stddef.h>,所以不要忘記把它列入。

+1

C標準並不保證空指針表示爲全零位,所以有一個機會這會打破。 –

+0

@rmartinjak它被大多數C標準庫實現定義爲((void *)0)。 – Dabo

+0

這與它無關 –