C 分配结构指针数组

C 分配结构指针数组,c,pointers,C,Pointers,我有上面显示的代码。 我知道我必须分配单个arrayOfXPointers数组元素。 我的问题是,在执行此操作之前,arrayOfXPointers[0],arrayOfXPointers[1]等是否为空或指向某个垃圾值。 考虑到单个数组元素的值可能是垃圾,我如何检查它以前是否分配过。有没有办法将所有数组元素动态初始化为null 从答案来看,使用calloc似乎是最好的选择,但C标准并不能保证这一点 我想到的另一个想法是运行一个循环,并将arrayOfXPointers[i]赋值为NULL

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

考虑到单个数组元素的值可能是垃圾,我如何检查它以前是否分配过。有没有办法将所有数组元素动态初始化为null


从答案来看,使用
calloc
似乎是最好的选择,但C标准并不能保证这一点

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

我的问题是,在执行此操作之前,arrayOfXPointers[0]、arrayOfXPointers[1]等是否为null或指向某个垃圾值

它们可以是NULL,可以是垃圾值,也可以是两者的混合

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

类似于
if(arrayOfXPointers[0]==NULL)
的东西就足够了

我的问题是,在执行此操作之前,arrayOfXPointers[0]、arrayOfXPointers[1]等是否为null或指向某个垃圾值

它们可以是NULL,可以是垃圾值,也可以是两者的混合

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

类似于
的if(arrayOfXPointers[0]==NULL)
应该足够了。

内存中会有垃圾。 要检查指针是否为空,请执行以下操作:
if(pointer==NULL)
或者更惯用的
if(!pointer)

内存中会有垃圾。 要检查指针是否为空,请执行以下操作:
if(pointer==NULL)
或更惯用的
if(!pointer)

来自手册页

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

从手册页


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

使用数组的
malloc
元素时,会有一些垃圾值。如果希望它们为空,可以使用calloc,它实际上是
malloc
+
memset
,zero初始化分配的内存块

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

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

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

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

顺便说一句,
NULL
定义在
中,所以不要忘记包含它。

当您使用数组的
malloc
元素时,会有一些垃圾值。如果希望它们为空,可以使用calloc,它实际上是
malloc
+
memset
,zero初始化分配的内存块

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

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

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

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

顺便说一句,
NULL
定义在
中,所以不要忘记包含它。

它是一个指针,但它取决于声明它的位置,全局变量由默认值初始化为零。更好地使用
calloc
malloc+memset
..@DavidKernin
arrayOfXPointers
指向
malloc()
分配的内存段,内容可以是任何内容。啊,对不起,我以为他指的是malloc之前的意思为什么不只是
X*array[10]={0}(将显式初始化第一个元素,将其他元素隐式初始化为空指针)?它是指针,但它取决于声明它的位置,全局变量由默认值初始化为零。更好地使用
calloc
malloc+memset
..@DavidKernin
arrayOfXPointers
指向
malloc()
分配的内存段,内容可以是任何内容。啊,对不起,我以为他指的是malloc之前的意思为什么不只是
X*array[10]={0}(将显式初始化第一个元素,将其他元素隐式初始化为空指针)?C标准不保证空指针表示为所有位零,因此有可能会中断。@rmartinjak它定义为((void*)0)对于大多数C标准库实现而言。这与此无关。C标准不保证空指针表示为所有位零,因此这有可能会中断。@rmartinjak大多数C标准库实现将其定义为((void*)0)。这与此无关