为什么以下代码会导致分段错误?(我试图创建两个相同大小的矩阵,一个使用静态分配,另一个使用动态分配)
我正在32位的Linux机器上运行gcc。 编辑:检查malloc()是否成功:
当我运行它时,没有任何输出(除了"Segmentation fault")。
#include <stdio.h>
#include <stdlib.h>
//Segmentation fault!
int main(){
#define X 5000
#define Y 6000
int i;
int a[X][Y];
int** b = (int**) malloc(sizeof(int*) * X);
for(i=0; i<X; i++){
b[i] = malloc (sizeof(int) * Y);
}
}
奇怪的是,如果我注释掉其中一个矩阵定义,代码就可以正常运行。就像这样:
#include <stdio.h>
#include <stdlib.h>
//No Segmentation fault!
int main(){
#define X 5000
#define Y 6000
int i;
//int a[X][Y];
int** b = (int**) malloc(sizeof(int*) * X);
for(i=0; i<X; i++){
b[i] = malloc (sizeof(int) * Y);
}
}
或者
#include <stdio.h>
#include <stdlib.h>
//No Segmentation fault!
int main(){
#define X 5000
#define Y 6000
int i;
int a[X][Y];
//int** b = (int**) malloc(sizeof(int*) * X);
//for(i=0; i<X; i++){
// b[i] = malloc (sizeof(int) * Y);
//}
}
我正在32位的Linux机器上运行gcc。 编辑:检查malloc()是否成功:
#include <stdio.h>
#include <stdlib.h>
//No Segmentation fault!
int main(){
#define X 5000
#define Y 6000
int i;
int a[X][Y];
int* tmp;
int** b = (int**) malloc(sizeof(int*) * X);
if(!b){
printf("Error on first malloc.\n");
}
else{
for(i=0; i<X; i++){
tmp = malloc (sizeof(int) * Y);
if(tmp)
b[i] = tmp;
else{
printf("Error on second malloc, i=%d.\n", i);
return;
}
}
}
}
当我运行它时,没有任何输出(除了"Segmentation fault")。
fprintf
输出到stderr
。printf
会输出到缓冲的stdout
,因此如果程序崩溃,你可能会丢失输出。 - David Thornley