分配一组结构指针

时间:2014-02-27 07:41:15

标签: c pointers

typedef struct _X
{
   int a;
   int b;
}X;

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

我有类似上面显示的代码。 我知道我必须分配单个arrayOfXPointers数组元素 我的问题是,在我执行此操作之前,arrayOfXPointers[0]arrayOfXPointers[1]等将为null或指向某个垃圾值。
  

如果先前已经分配了单个数组元素,我该如何判断它的值是否为垃圾。有没有办法动态地将所有数组元素初始化为null?


使用calloc的答案似乎是最好的选择,但C标准无法保证

我想到的另一个想法是运行循环并将arrayOfXPointers[i]指定为NULL 还有其他更好的便携式方法吗?

4 个答案:

答案 0 :(得分:2)

内存中会有垃圾。 检查指针是否为NULL执行: if (pointer==NULL)或更多惯用if (!pointer)

答案 1 :(得分:2)

当你使用malloc数组元素时会有一些垃圾值。如果您希望它们为NULL,则可以使用calloc,而实际上是malloc + memset,它会对分配的内存进行零初始化。

修改 正如@rmartinjak所提到的,标准并不保证NULL将被表示为全位为零,但它被大多数C标准库实现定义为((void *)0)

为了检查单个数组元素是否为空,您只需检查它

if (arrayOfXPointers[0] == NULL) 

BTW NULL定义位于<stddef.h>,所以不要忘记包含它。

答案 2 :(得分:1)

来自malloc()手册页。

malloc()函数分配大小字节并返回指向已分配内存的指针。 内存未初始化。因此可能为NULL或某些垃圾值。如果您将内容视为NULL,calloc()是更好的选择。

答案 3 :(得分:0)

  

我的问题是,在我这样做之前,arrayOfXPointers [0],arrayOfXPointers [1]等是null还是指向某个垃圾值。

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

  

如何检查单个数组元素是否为空

if (arrayOfXPointers[0] == NULL)这样的东西应该足够了。