| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1460 人关注过本帖
标题:内存溢出,是哪儿的问题啊?
只看楼主 加入收藏
gexiaohua
Rank: 1
等 级:新手上路
帖 子:14
专家分:2
注 册:2009-5-6
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
内存溢出,是哪儿的问题啊?
//利用遗传算法找优化问题的最优解
/*该优化问题为:
  max f(x1,x2)=21.5+x1*sin(4*π*x1)+x2*sin(20*π*x2)
  s.t. -3.0<=x1<=12.1
       4.1<=x2<=5.8 (保留后五位小数)
*/

#include <cstdlib>
#include<time.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define PI 3.1415926535
main()
{int pop[100][33],pop2[100][33],pop3[100][33],i,j,m,n,gen,k,randcut;
 double s1[100],s2[100],randnum[100],randpc,randpm;
 double a1,b1,a2,b2,pc,pm,F,x1[100],x2[100],eval[100],p[100],q[100];

 //赋初值
 a1=-3.0;
 b1=12.1;
 a2=4.1;
 b2=5.8;
 pc=0.25;
 pm=0.11;
 gen=0;
 for(i=0;i<100;i++)
 {s1[i]=0.0;
  s2[i]=0.0;
 }
 
 //得到100*33个随机数,作为初始种群
 srand((unsigned)time(0));
 for(i=0;i<100;i++)
     for(j=0;j<33;j++)
     {pop[i][j]=rand()%2;}

 /**********************************************************/
 /**********************************************************/     
 /*开始进行适应度计算、判别终止条件、选择、交叉、变异的循环*/
 /**********************************************************/
 /**********************************************************/
 for(gen=0;gen<900;gen++)
 {
  //解码:把基因转为性状
  for(i=0;i<100;i++)
  {for(j=0;j<=17;j++)
      {s1[i]=s1[i]+pop[i][j]*pow(2,(17-j));}
   x1[i]=a1+s1[i]*(b1-a1)/(pow(2,18)-1.0);
  }
  for(i=0;i<100;i++)
  {for(j=18;j<=32;j++)
      {s2[i]=s2[i]+pop[i][j]*pow(2,(32-j));}
   x2[i]=a2+s2[i]*(b2-a2)/(pow(2,15)-1.0);
  }
  
  //计算适应度
  for(i=0;i<100;i++)
  {eval[i]=21.5+x1[i]*sin(4*PI*x1[i])+x2[i]*sin(20*PI*x2[i]);}
  
  //进行选择
  F=0.0;
  for(i=0;i<100;i++)
  {F=F+eval[i];}
  for(i=0;i<100;i++)
  {p[i]=eval[i]/F;}
  q[0]=p[0];//位置待定
  for(i=1;i<100;i++)
  {q[i]=q[i-1]+p[i];}    //求得累积概率q[i]
  //srand((unsigned)time(0));
  for(i=0;i<100;i++)
  {randnum[i]=rand()/(double)(RAND_MAX);} //0-1之间的随机数
  for(i=0;i<100;i++)
      for(k=0;k<100;k++)
          if(randnum[i]<=q[k])
          {for(j=0;j<33;j++)
               pop2[i][j]=pop[k][j];
           k=100;//break????
          }
  for(i=0;i<100;i++)
      for(j=0;j<33;j++)
          pop[i][j]=pop2[i][j];
  
  //进行交叉
  for(k=0;k<50;k++)
  {//srand((unsigned)time(0));
   randpc=rand()/(double)(RAND_MAX);
   if(randpc<=pc)
   {do
        {//srand((unsigned)time(0));
         m=rand()%100;      //0-99之间的随机数
         //srand((unsigned)time(0));
         n=rand()%100;
        }
    while(m==n);           //m与n分别表示要交叉的染色体个体序号,m和n都是随机取的
    //srand((unsigned)time(0));
    randcut=rand()%33;        //0-32之间的随机数
    for(j=randcut;j<33;j++)
        {pop2[m][j]=pop[n][j];
         pop2[n][j]=pop[m][j];
        }
    for(j=0;j<33;j++)
        {pop3[2*k][j]=pop2[m][j];
         pop3[2*k+1][j]=pop2[n][j];
        }
   }//本次交叉结束
   else
   for(j=0;j<33;j++)
        {pop3[2*k][j]=pop[m][j];
         pop3[2*k+1][j]=pop[n][j];
        }//如果随机数大于交叉概率,则不交叉
  }//50次交叉结束
  
  //进行变异
  for(k=0;k<100;k++)
     {//srand((unsigned)time(0));
      randpm=rand()/(double)(RAND_MAX);
      if(randpm<=pm)
        {//srand((unsigned)time(0));
         randcut=rand()%33;
         pop3[k][randcut]=!(pop3[k][randcut]);
        }
     }//变异结束
  for(i=0;i<100;i++)
      for(j=0;j<33;j++)
        {pop[i][j]=pop3[i][j];}
 }//大循环结束
 printf("x1    x2    f\n");
 for(i=0;i<100;i++)
    {printf("%f   %f   %f\n",x1[i],x2[i],eval[i]);
    }
}//main结束
--------------------------------------------------------------------
在VC和WINTC下编译都没有问题,但是在VC运行的时候提示内存错误,某内存不能被read,在WINTC上运行则提示内存溢出。我现在检查不出哪儿的问题,希望各位高手能给于指导,感激不尽。
搜索更多相关主题的帖子: 内存 
2009-10-05 13:21
hyfl
Rank: 7Rank: 7Rank: 7
来 自:火星
等 级:黑侠
帖 子:113
专家分:552
注 册:2008-11-20
收藏
得分:20 
内存溢出很可能的问题就是某个数组的下标越界了。
自己多设置几个断点,逐段的找,可能比较有效,自己常这样弄。

“一切高手都是从菜鸟炼成的!”1099285180@
2009-10-05 16:51
gexiaohua
Rank: 1
等 级:新手上路
帖 子:14
专家分:2
注 册:2009-5-6
收藏
得分:0 
以下是引用hyfl在2009-10-5 16:51:30的发言:

内存溢出很可能的问题就是某个数组的下标越界了。
自己多设置几个断点,逐段的找,可能比较有效,自己常这样弄。
呵呵,我已经找到问题了,谢谢啊
2009-10-05 21:15
快速回复:内存溢出,是哪儿的问题啊?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052684 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved