c - 3维数组的分配

标签 c multidimensional-array malloc free dynamic-memory-allocation

我试图编写一个函数来动态分配一个 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语句后释放了函数中的内存吗?

提前致谢。

最佳答案

你没有初始化变量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;

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

关于c - 3维数组的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26315675/

相关文章:

python - 从arduino收集 'double'类型数据

C语言编程指针指向多维表

c - 进程在 C 中返回 -1073741819 (0xC0000005)

c++ - localtime() 的时间错误

c - 复制结构中包含的字符串指针时出现问题

c - 如何在c中使用指针合并排序字符串数组?

c++ - 无法理解函数

c++ - 指向二维数组的指针在 C++ 中如何工作?

c - 如何在 C 中使用另一个结构体内部的结构体(同时使用 malloc 和 2D 数组?)

c - C 中奇怪的 malloc 错误,标记词