2014-04-07 135 views
-1

我想創建一個使用malloc的二維數組。 我的代碼似乎是正確的,但是當我嘗試設置值時,收到「分段錯誤」消息。分割錯誤,二維矩陣,malloc

#include <stdio.h> 
#include <stdlib.h> 

int main(){ 
    int i, j; 
    int **m = (int **) malloc(5 * sizeof(int)); 

    if(m == NULL){ 
     printf("Error"); 
     getchar(); 
     exit(-1); 
    } 

    for(i = 0; i < 5; i++){ 
     m[i] = (int *) malloc(5 * sizeof(int)); 

     if(m[i] == NULL){ 
      printf("Error"); 
      getchar(); 
      exit(-1); 
     } 
    } 

    for(i = 0; i < 5; i++){ 
     for(j = 0; j < 5; j++){ 
      printf("%d %d\n", i, j); 
      m[i][j] = 0; 
     } 
    } 

    for(i = 0; i < 5; i++){ 
     for(j = 0; j < 5; j++){ 
      printf("%d ", m[i][j]); 
     } 
     printf("\n"); 
    } 

} 

謝謝。

+0

時,這是C

也不要投爲什麼標記爲C++ –

+0

我想你應該修改這一說法分配的指針數組:'INT ** M =(INT **)的malloc (5 * sizeof(int *));' – Ganesh

+0

存在內存泄漏。 – SGG

回答

1

變化

int **m = (int **) malloc(5 * sizeof(int)); 

//---------------------------------------v 
int **m = (int **) malloc(5 * sizeof(int *)); 

你的代碼將失敗,其中的int大小不等於指針變量的大小。

+0

這可以通過使用成語'int ** m = malloc(5 * sizeof * m);' –

0

某些系統的指針大小可能不等於int大小。在你的情況下,你假設指針的大小爲int

int ** m =(int **)malloc(5 * sizeof(int));

改變它

INT ** M = malloc的(5 *的sizeof(INT *));

使用後始終可用內存。它會導致內存泄漏。使用malloc Check here