使用 malloc 在 运行 时间制作二维数组
Making a two dimensional array at run time using malloc
我一直在尝试通过使用指向指针的指针的概念,在 运行 时间使用 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;
}
运行时错误的原因是因为你只为x[0]
分配内存。所以,更改
x[0]=(int *)malloc(3*sizeof(int));
到
x[i]=malloc(3*sizeof(int));
和don't cast the result of malloc
.
在
x[0]=(int *)malloc(3*sizeof(int));
您最终只为索引 0
分配了三次内存。使用 i
.
使用完毕后,别忘了free()
分配的内存。否则,会导致内存泄漏。
此外,无需转换 malloc()
/calloc()
的 return 值。
我一直在尝试通过使用指向指针的指针的概念,在 运行 时间使用 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;
}
运行时错误的原因是因为你只为x[0]
分配内存。所以,更改
x[0]=(int *)malloc(3*sizeof(int));
到
x[i]=malloc(3*sizeof(int));
和don't cast the result of malloc
.
在
x[0]=(int *)malloc(3*sizeof(int));
您最终只为索引 0
分配了三次内存。使用 i
.
使用完毕后,别忘了free()
分配的内存。否则,会导致内存泄漏。
此外,无需转换 malloc()
/calloc()
的 return 值。