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