Bre*_*dan 3 c malloc function multidimensional-array
我的main()块中声明了一个2D锯齿状数组.这将被传递给一个函数,以便为其分配内存.以下是最简化的情况,它会在运行时编译但崩溃.我哪里错了?
#include <stdio.h>
#include <stdlib.h>
void alloc2d(double ***p);
int main () {
double **data;
alloc2d(&data);
printf("Before assign to data\n");
data[0][0] = 0.1;
printf("After assign to data\n");
free(data);
}
void alloc2d(double ***p) {
int i, n, m;
// Get some dynamically assigned sizes
printf("Enter size: ");
scanf("%d %d", &n, &m);
// Now allocate
*p = malloc(n * sizeof(double*));
for (i = 0; i < n; i++) {
*p[i] = malloc(m * sizeof(double));
}
printf("End of alloc2d\n");
}
Run Code Online (Sandbox Code Playgroud)
这会读取值,但是当我输入低数字(即'1 1')时会崩溃,但是当我输入高数字(即'10 10')时会崩溃.
你做了一个非常简单的语法错误
*p[i] = (double*)malloc(m * sizeof(double));
Run Code Online (Sandbox Code Playgroud)
应该真的
(*p)[i] = (double*)malloc(m * sizeof(double));
Run Code Online (Sandbox Code Playgroud)
这是因为在C中,[]运算符的优先级高于*.因此,当您键入时*p[i],它会被翻译成**(p + i).
这意味着:您要求编译器通过偏移p by的地址来计算地址i * sizeof(double**),这显然不是您真正想要的.
因此,为了强制编译器首先取消引用p,只需*p用括号括起来.