我尝试编写一个函数来动态分配3维数组但我的程序崩溃了。这是代码:
#include <stdio.h>
#include<stdlib.h>
int*** funcao(int a,int b,int c)
{
int ***ppp=malloc(a*sizeof(int **));
int i,j,k;
for(i;i<a;i++)
{
ppp[i]=malloc(b*sizeof(int *));
}
for( i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
ppp[i][j]=malloc( c*sizeof(int));
}
}
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
for(k=0;k<c;k++)
{
ppp[i][j][k]=k*i*j;
}
}
}
return ppp;
for( i=0;i<a;i++)
{
for( j=0;j<b;j++)
{
free(ppp[i][j]);
}
}
for( i=0;i<a;i++)
{
free(ppp[i]);
}
free(ppp);
}
int main()
{
int ***ppp=funcao(2,5,7);
}
你知道问题出在哪里吗?是因为我在return语句之后释放了函数中的内存吗?
提前致谢。
答案 0 :(得分:1)
您没有初始化变量i
int i,j,k;
所以循环有未定义的行为
for(i;i<a;i++){
ppp[i]=malloc(b*sizeof(int *));
}
同样不清楚whar这部分功能是什么
for( i=0;i<a;i++){
for( j=0;j<b;j++){
free(ppp[i][j]);
}}
for( i=0;i<a;i++){
free(ppp[i]);
}
free(ppp);
}
退货声明后
return ppp;
您应该以适当的方式格式化代码。否则很难读懂它。
答案 1 :(得分:0)
您尚未在此for循环i
中初始化变量for(i;i<a;i++){
。
你正确地释放了分配的内存,但是你只是在错误的地方做了。返回指针后,您应该将其释放到main
函数中。
检查此修复代码:
#include <stdio.h>
#include <stdlib.h>
int*** funcao(int a,int b,int c)
{
int ***ppp = malloc( a * sizeof(int **) );
int i, j, k;
// Optimized your memory allocation code
for(i=0; i < a; i++)
{
ppp[i] = malloc( b * sizeof(int *) );
for(j=0; j < b; j++)
{
ppp[i][j] = malloc( c * sizeof(int) );
}
}
for(i=0; i < a; i++)
{
for(j=0; j < b; j++)
{
for(k=0; k < c; k++)
{
ppp[i][j][k]=k+i+j;
printf("%d\t",ppp[i][j][k]);
}
printf("\n");
}
printf("\n");
}
return ppp;
}
int main()
{
int ***ppp=funcao(2,5,7);
int i, j, k;
int a=2,b=5,c=7;
//Free the memory
for( i=0; i < a; i++)
{
for( j=0; j < b; j++)
{
free(ppp[i][j]);
}
}
for( i=0; i < a; i++)
{
free(ppp[i]);
}
free(ppp);
return 0;
}