我试图编写一个函数来动态分配三维数组,但是我的程序崩溃了。这里是代码:

#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);
}

你知道问题出在哪里吗?是因为我在返回语句之后释放了函数中的内存吗?
提前谢谢。

最佳答案

您没有初始化变量i

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++){
        free(ppp[i][j]);
    }}

for( i=0;i<a;i++){
    free(ppp[i]);
}

free(ppp);
}

返回语句后
return ppp;

您应该以适当的方式格式化代码。否则很难读懂。

10-08 07:10