2014-04-07 132 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