Gre*_*lin 3 c malloc runtime-error
我使用下面的代码片段,使用最少的malloc()调用次数为2D数组分配内存.
我想使用下标p [i] [j]访问数组.
#define ROW 3
#define COL 2
int main()
{
void **ptr = malloc( ROW*COL* sizeof(int) );
int (*p)[COL] = ptr;
int i, j;
for( i = 0; i < ROW; ++i )
for( j = 0; j < COL; ++j )
scanf("%d", &ptr[i][j]);
for( i = 0; i < ROW; ++i )
{
for( j = 0; j < COL; ++j )
printf("%d ", p[i][j]);
printf("\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
无论输入是什么,程序都正确输出.
但是,它显示 运行时错误 .为什么?
如果数组维度在编译时是已知的(如在您的示例中),那么您确实可以在一次malloc调用中分配内存.但是您必须使用正确的指针类型来访问该内存.在你的情况下,这将是你的p指针.您的p指针被正确声明,但由于某种原因,您完全忽略了它的存在scanf并使用了它ptr.
停止尝试ptr用于阵列访问.使用p.访问您的数组元素p[i][j],它应该工作.
事实上,我会ptr完全摆脱并以下列方式进行内存分配
int (*p)[COL] = malloc(ROW * sizeof *p);
Run Code Online (Sandbox Code Playgroud)
此外,由于两个维度在编译时都是已知的,因此您实际上可以将其分配为
int (*p)[ROW][COL] = malloc(sizeof *p);
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,你必须记住访问数组(*p)[i][j](注意*).选择您喜欢的方法.
| 归档时间: |
|
| 查看次数: |
2297 次 |
| 最近记录: |