2015-10-26 60 views
0

我在这个论坛上有几个例子,但看起来我的程序在某些时候仍然不断崩溃。内存分配。二维数组(无效函数)

我想要做的只是使用void function进行内存分配。

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; 
} 
+3

没有二维数组!作为一名三星级程序员并不是一种恭维。由于你的函数无论如何都是'void',所以你应该返回指针。 – Olaf

回答

3

尝试在分配之前使用(*matrix)[i]。添加:

(*matrix) = malloc(n * sizeof(**matrix)); 

在您的for循环之前。

注意的两点这里的东西:

1)不要投malloc结果,

2)使用sizeof(*pointer),而不是明确地写出类型;这样,如果您决定稍后更改类型,它仍然可以工作。

此外,您需要将free中的所有分配也作为循环使用;否则,你有内存泄漏。

+0

感谢队友,现在都完美了 – beingas