使用malloc创建指针数组时出现分段错误

时间:2013-04-25 20:58:49

标签: c segmentation-fault malloc fault

我遇到动态创建“多维数组”的问题。我在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行遇到了分段错误。

1 个答案:

答案 0 :(得分:3)

这不是等同性检查,而是赋值

if (cache_array = NULL)

cache_array设置为NULL并且不会进入if分支,因为分配的结果基本上是假的。然后代码继续取消引用NULL指针。

更改为:

if (cache_array == NULL)

或:

if (!cache_array)