我一直在尝试使用malloc
在运行时通过使用指针指针的概念来分配二维数组。此代码不显示任何编译错误,但会产生运行时错误。
#include<stdio.h>
#include<stdlib.h>
int ** alpha(void)
{
int **x;
x=(int **)malloc(3*sizeof(int *));
for(int i=0;i<3;i++)
{
x[0]=(int *)malloc(3*sizeof(int));
}
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
x[i][j]=i+j;
}
}
return x;
}
int main()
{
int **p;
p=alpha();
printf("%d",p[1][2]);
return 0;
}
答案 0 :(得分:1)
运行时错误的原因是因为您只为x[0]
分配内存。所以,更改
x[0]=(int *)malloc(3*sizeof(int));
到
x[i]=malloc(3*sizeof(int));
答案 1 :(得分:0)
在
x[0]=(int *)malloc(3*sizeof(int));
你最终只为索引0
分配了三次内存。使用i
。
在您完成使用后,请勿忘记free()
已分配的内存。否则,它将导致内存泄漏。
此外,无需转换malloc()
/ calloc()
的返回值。