2015-10-26 59 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