我正在尝试使用malloc创建一个二维数组。 我的代码似乎是正确的但是当我尝试设置值时,我收到“Segmentation Fault”消息。
#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 :(得分:1)
更改
int **m = (int **) malloc(5 * sizeof(int));
到
//---------------------------------------v
int **m = (int **) malloc(5 * sizeof(int *));
如果int
的大小不等于指针变量的大小,则代码将失败。
答案 1 :(得分:0)
某些系统的指针大小可能不等于int的大小。在您的情况下,假设指针的大小为int
int ** m =(int **)malloc(5 * sizeof(int));
将其更改为
int ** m = malloc(5 * sizeof(int *));
使用后始终释放内存。它会导致内存泄漏。
使用malloc Check here
时也不要施放