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
还有其他更好的便携式方法吗?
答案 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)
这样的东西应该足够了。