[英]Calling memset on pointer to array?
我不认为我在这里理解了什么......
bool (*lookup)[100];
memset(lookup, 0, 100 * sizeof(*lookup));
我正在尝试初始化一个指向堆栈分配数组的指针(该指针只会传递给堆栈帧内的调用)。 memset 用于将数组初始化为 0。
前面的代码导致段错误,难道memset不喜欢指针?
通过做
memset(lookup, 0, 100 * sizeof *lookup);
您没有“初始化指针”,而是指针lookup
指向的内存。
并且很可能在调用memset()
之前,您没有将指针指向某个有效内存,因此写入随机内存会调用未定义的行为,这会导致程序崩溃。
有几种方法可以获得有效内存。
像这样从堆栈中获取它:
bool lookup_instance[100] = {0};
bool (*lookup)[100] = &lookup_instance;
/* No need to memset it to 0s as this had been done by ... = {0} already. */
或者像这样自己得到它:
bool (*lookup)[100] = malloc(sizeof *lookup);
if (NULL == lookup)
{
perror("malloc() failed"):
}
else
{
memset(lookup, 0, sizeof *lookup);
}
最短的解决方案是:
bool (*lookup)[100] = calloc(1, sizeof *lookup);
if (NULL == lookup)
{
perror("calloc() failed");
}
else
{
/* No need to memset it to 0s as this has been done by calloc() already. */
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.