用calloc进行C段错误

时间:2012-07-16 01:54:27

标签: c segmentation-fault calloc

这两行给了我一个段错误,我无法弄清楚:

int** input;
*input = (int*)calloc(5, sizeof(int));

就是这样。我理解这一点的方式是,请求内存等于5个int并返回内存地址。将内存地址存储在输入指向的值中。我错过了什么?

2 个答案:

答案 0 :(得分:7)

你永远不会初始化input所以引用那里发生的事情,也许这就是你想要的

int** input;
input = malloc(sizeof(int*));
*input = calloc(5, sizeof(int));

答案 1 :(得分:0)

问题是您正在尝试分配尚未分配的地址。如果您将值直接分配给输入,那么它应该可以工作。

input = (int *) calloc(5, sizeof(int));

编辑:我忘了更新演员表,我认为还有更多的解释。

分配应该是这样的:

input = calloc(5, sizeof(int *));

这样做是分配一个由5个整数指针组成的数组。一旦你有了,你就可以分配整数数组来存储这些整数指针。 (注意:我在这里假设C99支持。

for (int i = 0; i < 5; i++) {
    input[i] = calloc(5, sizeof(int));
}

这样做是分配一个5乘5的整数矩阵,它与声明输入基本相同,如下所示:

int input[5][5];

不同之处在于,在此声明中,编译器会为您管理分配,这可能是您想要的,也可能不是。例如,如果此代码在函数中并且您想要返回指向已分配的矩阵的指针,那么您将需要自己分配内存。如果您只使用当前函数中的数据结构,那么让编译器管理内存将正常工作。