1

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

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

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

4

2 回答 2

7

你永远不会初始化input所以引用发生在那里的任何东西,也许这就是你想要的

int** input;
input = malloc(sizeof(int*));
*input = calloc(5, sizeof(int));
于 2012-07-16T02:12:50.030 回答
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];

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

于 2012-07-16T01:57:32.117 回答