C中的memset函数初始化所有数组
Memset function in C initialised all the arrays
我试图初始化一个由指针组成的数组:
我使用的代码是:
int c = 15;
Struct *Pointer[c] = {NULL};
memset( pointer, 0, c *sizeof(pointer) );
它起作用了,但是这个 memset() 函数不仅初始化了我的指针数组,还初始化了我所有其他数组...
有什么办法可以解决吗?
我不能使用 for(){} 或 while 函数,因为它会增加我的时间复杂度...
干杯'
sizeof(pointer)
是整个数组的大小pointer
。将大于 1 的整数乘以 memset()
的大小将导致超出范围的访问。
删除有害乘法。
int c = 15;
Struct *Pointer[c] /* = {NULL} */; /* VLA cannot be initialized */
/* some other code that uses Pointer */
memset(Pointer, 0, sizeof(Pointer));
memset(Pointer, 0, sizeof(Pointer));
或
memset(Pointer, 0, c * sizeof(*Pointer));
找出不同。
如果您付出一些研究并打印出 sizeof(Pointer)
并计算 c * sizeof(Pointer)
错误的原因,您就可以自己回答您的问题。
我试图初始化一个由指针组成的数组:
我使用的代码是:
int c = 15;
Struct *Pointer[c] = {NULL};
memset( pointer, 0, c *sizeof(pointer) );
它起作用了,但是这个 memset() 函数不仅初始化了我的指针数组,还初始化了我所有其他数组...
有什么办法可以解决吗?
我不能使用 for(){} 或 while 函数,因为它会增加我的时间复杂度...
干杯'
sizeof(pointer)
是整个数组的大小pointer
。将大于 1 的整数乘以 memset()
的大小将导致超出范围的访问。
删除有害乘法。
int c = 15;
Struct *Pointer[c] /* = {NULL} */; /* VLA cannot be initialized */
/* some other code that uses Pointer */
memset(Pointer, 0, sizeof(Pointer));
memset(Pointer, 0, sizeof(Pointer));
或
memset(Pointer, 0, c * sizeof(*Pointer));
找出不同。
如果您付出一些研究并打印出 sizeof(Pointer)
并计算 c * sizeof(Pointer)
错误的原因,您就可以自己回答您的问题。