这是一段代码。 当N = 70000或更多时,代码进入步骤1并使用分段错误崩溃。相反,如果我把例如N = 50000,calloc返回NULL,程序退出返回2. 那么为什么N = 70000 calloc不会抱怨呢? 我用gcc和icc编译了这个。calloc初始化比可用内存更多的内存
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main(){
float *matrix1,*q,*matrix2;
int i,j,n,N=70000;
n = N+1;
if((q=calloc(n,sizeof*q)) == NULL) return 1;
if((matrix1=calloc(n*n,sizeof*matrix1)) == NULL) return 2;
if((matrix2=calloc(N*N,sizeof*matrix2)) == NULL) return 3;
//STEP1
for(i=0;i<N;i++){
for(j=0;j<N;j++){
matrix2[i*N+j] = i*N+j;
}
}
//STEP2
for(i=0;i<N;i++){ // raw
for(j=0;j<=i;j++){ // column
if(i==j){ matrix1[i+j*n] = 0; } //diagonal elements
else {
matrix1[i+j*n] = i+j*n;
matrix1[j+i*n] = j+i*n;
}
}
}
return 0;
}
由于int不能存储这么大的值,所以对于i,j和N绝对使用long int。 – Igor 2014-08-28 10:09:05
@Igor更好:'size_t'。 – glglgl 2014-08-28 10:21:08