【发布时间】:2013-10-21 15:57:35
【问题描述】:
我不认为我在这里理解了什么......
bool (*lookup)[100];
memset(lookup, 0, 100 * sizeof(*lookup));
我正在尝试初始化一个指向堆栈分配数组的指针(该指针只会传递给堆栈框架内的调用)。 memset 用于将数组初始化为 0。
前面的代码导致segfault,memset不喜欢指针吗?
【问题讨论】:
-
“堆栈分配数组”在哪里?
-
memset喜欢指针就好了;如果您在指针占用的内存上调用它,memset(&loopkup, 0, sizeof(lookup));代码将是有效的(尽管有些毫无意义)。如所写,您使用从未初始化的指针变量中检索到的 indeterminate 地址调用它,因此这是未定义的行为。 -
传递给
memset的大小必须与指针指向的对象一致。发布的代码具有未定义的行为,因为指针未初始化,否则发布初始化指针的代码。