有梦的人 发表于 2011-1-6 18:46

自己写的一个算法的程序,内存不能为written

#include <time.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#define pi 3.1415926
#define N 50000
void main()
{
      double t;
      int s;
      int z={0,0,0,0,0,0,0};
      long a;
      int m=0,n;
      double x;
      double b;
      double DET=0,MTBT;
      for (int j=0;j<N;j++)
      {
                for (int i=0;i<7;i++)
                {
                        time_t T;
                        time(&T);
                        srand(T);
                        double b1,c1;
                        double a1=(rand()/(RAND_MAX*1.0));
                        switch (i)
                        {
                        case 0:
                              t=-2500*log(a1);
                              break;
                        case 1:
                              b1=(rand()/(RAND_MAX*1.0));
                              c1=(sqrt((-2)*log(a1)))*sin(2*pi*b1);
                              break;
                        case 2:
                              t=-2500*log(a1);
                              break;

                        case 3:
                              t=-2500*log(a1);
                              break;
                        case 4:
                            b1=(rand()/(RAND_MAX*1.0));
                              c1=(sqrt((-2)*log(a1)))*sin(2*pi*b1);
                              break;
                        case 5:
                              t=-2500*log(a1);
                              break;
                        case 6:
                              t=-2500*log(a1);
                              break;
                        }
                        for (int k=0;k<7;k++)
                        {
                              for (int l=k;l<=k;l++)
                              {
                                        z=1;
                                        s=(z&&z||z)&&z||((z||z)&&z);
                                        if(s==1)
                                        {
                                                a=l;
                                                b=t;
                                                m++;
                                        }
                              }
                        }
                        for (k=0;k<m-2;k++)
                              if (b<b)
                              {
                                        x=b;
                                        b=b;
                                        b=x;
                                        n=a;
                                        a=a;
                                        a=n;
                              }
                }
      }
      DET=+b;
      MTBT=DET/N;
      cout<<MTBT<<endl;
}

帮忙看一下,出错的地方啊...

wqsong 发表于 2011-1-6 23:53

回复 1 # 有梦的人 的帖子

把出错提示贴出来。。。

有梦的人 发表于 2011-1-7 10:24

本帖最后由 有梦的人 于 2011-1-7 10:25 编辑

wqsong 发表于 2011-1-6 23:53 http://www.chinavib.com/static/image/common/back.gif
回复 1 # 有梦的人 的帖子

把出错提示贴出来。。。

是一个控制台程序,没有警告和报错,只是运行通不过,不知道怎么回事

wqsong 发表于 2011-1-7 22:32

本帖最后由 wqsong 于 2011-1-7 22:35 编辑

回复 3 # 有梦的人 的帖子

第64行,m一直自加下去,a,b会越界的,最早应该是b越界,所以会提示那内存错误。。。
应该是这里的问题,没看明白你想干什么,自己根据意思修改。。。

wqsong 发表于 2011-1-7 22:37

本帖最后由 wqsong 于 2011-1-7 22:38 编辑

回复 3 # 有梦的人 的帖子

还有就是54行的k,和68行的k,这种写法是不符合C++标准。
应该是有的编译器能通过,有的编译器通不过。
建议:把k定义到外面,或者68行也写成int k。。。。

有梦的人 发表于 2011-1-8 18:56

wqsong 发表于 2011-1-7 22:32 static/image/common/back.gif
回复 3 # 有梦的人 的帖子

第64行,m一直自加下去,a,b会越界的,最早应该是b越界,所以会提示那内存错 ...

我觉得应该不会的,m自加,但它会在执行一次if语句后自动跳出,再进行下次循环,然后再判断的啊

有梦的人 发表于 2011-1-8 18:57

wqsong 发表于 2011-1-7 22:37 static/image/common/back.gif
回复 3 # 有梦的人 的帖子

还有就是54行的k,和68行的k,这种写法是不符合C++标准。


第二个k不能定加int,如果加了,就表示重新定义了一次了,这样不是重复定义了吗?

wqsong 发表于 2011-1-8 19:38

本帖最后由 wqsong 于 2011-1-8 19:43 编辑

回复 6 # 有梦的人 的帖子

第一个问题,跳出去以后,下次循环的m不是在上次循环的结果基础上加的吗,外循环20次以后的某次肯定越界。20*7*7=980,会不会自己再想想。。。

wqsong 发表于 2011-1-8 19:42

本帖最后由 wqsong 于 2011-1-8 20:08 编辑

回复 7 # 有梦的人 的帖子

第二个问题,在进入一个block时候局部auto变量是在栈中开辟的,等离开这个block时候要还原栈。
找本书,看看block或者scope的意义。

有梦的人 发表于 2011-1-8 21:18

wqsong 发表于 2011-1-8 19:42 static/image/common/back.gif
回复 7 # 有梦的人 的帖子

第二个问题,在进入一个block时候局部auto变量是在栈中开辟的,等离开这个blo ...

{:{20}:}谢谢主任啦,呵呵,我初学者啊...有问题还会请教的啊

wqsong 发表于 2011-1-8 22:24

回复 10 # 有梦的人 的帖子

也就是说,在早期的C++编译器中,for后面括号定义的变量生命期是与for平行的;而后来C++标准要求for后面括号定义的变量生命期是要比for低一级。
早期C++编译器


something begin{
      for(int i = 0; i < 5; ++i){
                //do something
      }
      // i 可见
}
比较新的编译器
something begin{
for(int i = 0; i < 5; ++i){
                //do something
}
// i 不可见
}

客气,共同进步。。。

Rainyboy 发表于 2011-1-9 15:05

呵呵,C/C++就是把双刃剑,用好了削铁如泥,用不好可能会伤了自己。
{:{46}:}
页: [1]
查看完整版本: 自己写的一个算法的程序,内存不能为written