这两行给了我一个段错误,我无法弄清楚:
int** input;
*input = (int*)calloc(5, sizeof(int));
而已。我理解这一点的方式是,请求等于 5 个整数的内存并返回内存地址。将内存地址存储在输入指向的值中。我错过了什么?
这两行给了我一个段错误,我无法弄清楚:
int** input;
*input = (int*)calloc(5, sizeof(int));
而已。我理解这一点的方式是,请求等于 5 个整数的内存并返回内存地址。将内存地址存储在输入指向的值中。我错过了什么?
你永远不会初始化input
所以引用发生在那里的任何东西,也许这就是你想要的
int** input;
input = malloc(sizeof(int*));
*input = calloc(5, sizeof(int));
问题是您正在尝试分配一个尚未分配的地址。如果您将值直接分配给输入,那么它应该可以工作。
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];
不同之处在于,在此声明中,编译器为您管理分配,这可能是您想要的,也可能不是您想要的。例如,如果此代码在一个函数中,并且您想返回一个指向您已分配的矩阵的指针,那么您将需要自己分配内存。如果您只在当前函数中使用数据结构,那么让编译器管理内存就可以了。