自己写的一个算法的程序,内存不能为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;
}
帮忙看一下,出错的地方啊... 回复 1 # 有梦的人 的帖子
把出错提示贴出来。。。 本帖最后由 有梦的人 于 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:35 编辑
回复 3 # 有梦的人 的帖子
第64行,m一直自加下去,a,b会越界的,最早应该是b越界,所以会提示那内存错误。。。
应该是这里的问题,没看明白你想干什么,自己根据意思修改。。。
本帖最后由 wqsong 于 2011-1-7 22:38 编辑
回复 3 # 有梦的人 的帖子
还有就是54行的k,和68行的k,这种写法是不符合C++标准。
应该是有的编译器能通过,有的编译器通不过。
建议:把k定义到外面,或者68行也写成int k。。。。
wqsong 发表于 2011-1-7 22:32 static/image/common/back.gif
回复 3 # 有梦的人 的帖子
第64行,m一直自加下去,a,b会越界的,最早应该是b越界,所以会提示那内存错 ...
我觉得应该不会的,m自加,但它会在执行一次if语句后自动跳出,再进行下次循环,然后再判断的啊 wqsong 发表于 2011-1-7 22:37 static/image/common/back.gif
回复 3 # 有梦的人 的帖子
还有就是54行的k,和68行的k,这种写法是不符合C++标准。
第二个k不能定加int,如果加了,就表示重新定义了一次了,这样不是重复定义了吗? 本帖最后由 wqsong 于 2011-1-8 19:43 编辑
回复 6 # 有梦的人 的帖子
第一个问题,跳出去以后,下次循环的m不是在上次循环的结果基础上加的吗,外循环20次以后的某次肯定越界。20*7*7=980,会不会自己再想想。。。 本帖最后由 wqsong 于 2011-1-8 20:08 编辑
回复 7 # 有梦的人 的帖子
第二个问题,在进入一个block时候局部auto变量是在栈中开辟的,等离开这个block时候要还原栈。
找本书,看看block或者scope的意义。 wqsong 发表于 2011-1-8 19:42 static/image/common/back.gif
回复 7 # 有梦的人 的帖子
第二个问题,在进入一个block时候局部auto变量是在栈中开辟的,等离开这个blo ...
{:{20}:}谢谢主任啦,呵呵,我初学者啊...有问题还会请教的啊 回复 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 不可见
}
客气,共同进步。。。
呵呵,C/C++就是把双刃剑,用好了削铁如泥,用不好可能会伤了自己。
{:{46}:}
页:
[1]