QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 604|回复: 6

请教,动态分配内存的问题

[复制链接]
发表于 2004-9-3 12:34:57 | 显示全部楼层 |阅读模式
我写的一个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));
发表于 2004-9-3 22:40:13 | 显示全部楼层
max_gen是多少?
回复

使用道具 举报

 楼主| 发表于 2004-9-6 09:14:56 | 显示全部楼层
max_gen = 100
回复

使用道具 举报

发表于 2004-9-6 09:22:16 | 显示全部楼层
你能不能贴个完整点的代码,很多变量的值都是未知的.
回复

使用道具 举报

 楼主| 发表于 2004-9-6 10:17:08 | 显示全部楼层
搞定了,只要把fmin换成Fmin, fmax换成Fmax 就行了,原来大小写有讲究。
回复

使用道具 举报

 楼主| 发表于 2004-9-6 10:20:51 | 显示全部楼层
请问mozilla版主,这个大小写到底有什么讲究?

我不管在windows还是在Linux下编程都是初哥,赶鸭子上架,呵呵。
回复

使用道具 举报

发表于 2004-9-6 12:07:17 | 显示全部楼层
gcc是大小写敏感的.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 13:47 , Processed in 0.051029 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表