C 内存分配。二维数组(Void函数)

C 内存分配。二维数组(Void函数),c,pointers,matrix,2d,void,C,Pointers,Matrix,2d,Void,我在这个论坛上只举了几个例子,但我的程序似乎仍在某个时候崩溃 我只想使用void函数分配内存 void alloc(int ***matrix, int n) { int i = 0; for( ; i < n; i++) { (*matrix)[i] = (int*)malloc(n * sizeof(int)); } i = 0; for( ; i < n; i++) { int j = 0

我在这个论坛上只举了几个例子,但我的程序似乎仍在某个时候崩溃

我只想使用
void函数
分配内存

void alloc(int ***matrix, int n)
{
    int i = 0;
    for( ; i < n; i++)
    {
        (*matrix)[i] = (int*)malloc(n * sizeof(int));
    }

    i = 0;
    for( ; i < n; i++)
    {
        int j = 0;
        for( ; j < n; j++)
        {
            (*matrix)[i][j] = i * j;
        }
    }
}

//-------------------------------------------------------------------
int main()
{
    int n;
    int **matrix_pp;

    printf("Enter n: ");
    scanf("%d", &n);

    alloc(&matrix_pp, n);

    free(matrix_pp);
    return 0;
}
void alloc(int***矩阵,int n)
{
int i=0;
对于(;i
在分配之前,您尝试使用
(*矩阵)[i]
。加:

 (*matrix) = malloc(n * sizeof(**matrix));
在您的
for
循环之前

这里要注意两件事:

1) 不要强制转换malloc的结果

2) 使用
sizeof(*指针)
而不是显式写出类型;这样,如果您决定以后更改类型,它仍然可以工作

此外,您还需要
将循环中的所有分配也作为一个循环释放出来;否则,您将出现内存泄漏。

您试图在分配内存之前使用
(*matrix)[i]
。加:

 (*matrix) = malloc(n * sizeof(**matrix));
在您的
for
循环之前

这里要注意两件事:

1) 不要强制转换malloc的结果

2) 使用
sizeof(*指针)
而不是显式写出类型;这样,如果您决定以后更改类型,它仍然可以工作

此外,您还需要
将循环中的所有分配也作为一个循环释放出来;否则,您将出现内存泄漏。

您试图在分配内存之前使用
(*matrix)[i]
。加:

 (*matrix) = malloc(n * sizeof(**matrix));
在您的
for
循环之前

这里要注意两件事:

1) 不要强制转换malloc的结果

2) 使用
sizeof(*指针)
而不是显式写出类型;这样,如果您决定以后更改类型,它仍然可以工作

此外,您还需要
将循环中的所有分配也作为一个循环释放出来;否则,您将出现内存泄漏。

您试图在分配内存之前使用
(*matrix)[i]
。加:

 (*matrix) = malloc(n * sizeof(**matrix));
在您的
for
循环之前

这里要注意两件事:

1) 不要强制转换malloc的结果

2) 使用
sizeof(*指针)
而不是显式写出类型;这样,如果您决定以后更改类型,它仍然可以工作


此外,您还需要
将循环中的所有分配也作为一个循环释放出来;否则,将导致内存泄漏。

没有2D数组!而成为一名三星级程序员并不是一种恭维。由于您的函数是
void
无论如何,您应该返回指针。没有2D数组!而成为一名三星级程序员并不是一种恭维。由于您的函数是
void
无论如何,您应该返回指针。没有2D数组!而成为一名三星级程序员并不是一种恭维。由于您的函数是
void
无论如何,您应该返回指针。没有2D数组!而成为一名三星级程序员并不是一种恭维。由于你的函数是
void
无论如何,你应该返回指针。谢谢,伙计,现在一切都完美了谢谢,伙计,现在一切都完美了谢谢,伙计,现在一切都完美了谢谢,伙计,一切都完美了