使用malloc在运行时创建二维数组

时间:2015-01-14 14:05:12

标签: c arrays pointers

我一直在尝试使用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;
}

2 个答案:

答案 0 :(得分:1)

运行时错误的原因是因为您只为x[0]分配内存。所以,更改

x[0]=(int *)malloc(3*sizeof(int));

x[i]=malloc(3*sizeof(int));

don't cast the result of malloc

答案 1 :(得分:0)

x[0]=(int *)malloc(3*sizeof(int));

你最终只为索引0分配了三次内存。使用i

在您完成使用后,请勿忘记free()已分配的内存。否则,它将导致内存泄漏

此外,无需转换malloc() / calloc()的返回值。