这两行给了我一个段错误,我无法弄清楚:
int** input;
*input = (int*)calloc(5, sizeof(int));
就是这样。我理解这一点的方式是,请求内存等于5个int并返回内存地址。将内存地址存储在输入指向的值中。我错过了什么?
答案 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];
不同之处在于,在此声明中,编译器会为您管理分配,这可能是您想要的,也可能不是。例如,如果此代码在函数中并且您想要返回指向已分配的矩阵的指针,那么您将需要自己分配内存。如果您只使用当前函数中的数据结构,那么让编译器管理内存将正常工作。