0

我在动态创建“多维数组”时遇到问题。我已经阅读了 comp.lang.c FAQ 上的 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 行出现了分段错误。

4

1 回答 1

3

这不是相等检查,而是赋值

if (cache_array = NULL)

由于分配的结果,它设置cache_arrayNULL并且不进入if分支本质上是错误的。然后代码继续取消引用NULL指针。

改成:

if (cache_array == NULL)

或者:

if (!cache_array)
于 2013-04-25T20:59:50.137 回答