我遇到动态创建“多维数组”的问题。我在comp.lang.c常见问题解答中阅读了6.14,并遵循其中列出的代码。
cache_array = malloc(cm_blks * sizeof(int *));
if (cache_array = NULL) {
fprintf(stderr, "out of memory\n");
exit(1);
}
for (i = 0; i < cm_blks; i++) {
cache_array[i] = malloc(6 * sizeof(int));
if (cache_array[i] == NULL) {
fprintf(stderr, "out of memory\n");
exit(1);
}
}
变量cm_blks是一个整数,在我的测试用例中等于8. cache_array初始化为:
int **cache_array;
代码编译得很好,但是当我运行输出时,我在第二个malloc行遇到了分段错误。
答案 0 :(得分:3)
这不是等同性检查,而是赋值:
if (cache_array = NULL)
将cache_array
设置为NULL
并且不会进入if
分支,因为分配的结果基本上是假的。然后代码继续取消引用NULL
指针。
更改为:
if (cache_array == NULL)
或:
if (!cache_array)