gpt4 book ai didi

在指向数组的指针上调用 memset?

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:44 45 4
gpt4 key购买 nike

我不认为我在这里理解了什么......

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. */
}

关于在指向数组的指针上调用 memset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19499293/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com