|
我写的一个C程序在windows下运行没有问题,移植到Linux下时,出现segmenation fault错误。经调试,发现问题出在一段动态分配内存的代码(附后),但是是直到运行完倒数第五行的fmin = (float *)malloc((max_gen+1)*sizeof(float)); 后才出的错。
请指教是怎么回事?动态内存用的太多了?
AV_MM=(double *)malloc((max_gen+1)*sizeof(double));
MX_MM=(double *)malloc((max_gen+1)*sizeof(double));
MN_MM=(double *)malloc((max_gen+1)*sizeof(double));
for(i=0;i<=max_gen;i++) { AV_MM=0.0; MX_MM=0.0; MN_MM=0.0;}
AV_MM1=(double *)malloc((max_gen+1)*sizeof(double));
MX_MM1=(double *)malloc((max_gen+1)*sizeof(double));
MN_MM1=(double *)malloc((max_gen+1)*sizeof(double));
for(i=0;i<=max_gen;i++) { AV_MM1=0.0; MX_MM1=0.0; MN_MM1=0.0;}
AV_MM2=(double *)malloc((max_gen+1)*sizeof(double));
MX_MM2=(double *)malloc((max_gen+1)*sizeof(double));
MN_MM2=(double *)malloc((max_gen+1)*sizeof(double));
for(i=0;i<=max_gen;i++) { AV_MM2=0.0; MX_MM2=0.0; MN_MM2=0.0;}
AV_MM3=(double *)malloc((max_gen+1)*sizeof(double));
MX_MM3=(double *)malloc((max_gen+1)*sizeof(double));
MN_MM3=(double *)malloc((max_gen+1)*sizeof(double));
for(i=0;i<=max_gen;i++) { AV_MM3=0.0; MX_MM3=0.0; MN_MM3=0.0;}
//initialization for mutation scheme "TBack", Added by lch -start
No_CV = NGen + NTx + NBsh;
Tao = 1.0F/(float)(sqrt(2.0F*sqrt(No_CV)));
Tao1 = 1.0F/(float)(sqrt(2.0F*No_CV));
SD_Vg = (float **)malloc((OPF_pop_size)* sizeof(float *));
SD_Vg[0] = (float *)malloc((OPF_pop_size)* (NGen+1)* sizeof(float));
for(i=1;i<OPF_pop_size;i++) SD_Vg=SD_Vg[i-1] + (NGen+1);
for(i=0;i<OPF_pop_size;i++){ for(j=1;j<=NGen;j++) {SD_Vg[j] = SD0;} }
SD_Tx = (float **)malloc((OPF_pop_size)*sizeof(float *));
SD_Tx[0] = (float *)malloc((OPF_pop_size)* (NTx+1)* sizeof(float));
for(i=1;i<OPF_pop_size;i++) SD_Tx=SD_Tx[i-1] + (NTx+1);
for(i=0;i<OPF_pop_size;i++) { for(j=1;j<=NTx;j++) {SD_Tx[j] = SD0;} }
SD_Bsh = (float **)malloc((OPF_pop_size)*sizeof(float *));
SD_Bsh[0] = (float *)malloc((OPF_pop_size)*(NBsh+1)*sizeof(float));
for(i=1;i<OPF_pop_size;i++) SD_Bsh = SD_Bsh[i-1] + (NBsh+1);
for(i=0;i<OPF_pop_size;i++) { for(j=1;j<=NBsh;j++) {SD_Bsh[j] = SD0;}}
randV = (float *)malloc(OPF_pop_size*sizeof(float));
//initialization for mutation scheme "TBack", Added by lch -end
//initialization for arrays used in mutation scheme "LaiMa", by lch
Beta = (float *)malloc((max_gen+1)*sizeof(float));
Beta[0] = Beta0;
fmin = (float *)malloc((max_gen+1)*sizeof(float));
fmax = (float *)malloc((max_gen+1)*sizeof(float));
//initialization for arrays used in mutation scheme "LBShi", by lch
Ei = (float *)malloc((max_gen+1)*sizeof(float));
Bee = (float *)malloc((max_gen+1)*sizeof(float)); |
|