关于release mode何debug mode下程序种random number sequence的不同


本人用VC++6.0编译C++的程序,其中包含一个自己写得random number generator,在使用release mode跑程序的过程中,程序死机。在记录下出示给如得seed后,用debug模式进行错误的跟踪,开始的几个randomnumber sequence是相同的,但是后来就不一样了。以至于无法跟踪到原来出错的情况。对于原先一些成功完成的程序,使用release和debug两种模式,得到的结果都是一样的。

已经出现了几个出错的情况,再release模式下,返回的机器码如下:
move dword eax, ebx+70h
eax,eax

希望高人指点造成这种情况的原因,以及如何能够trace到出错的行,以便改正。
项目是按紧迫,本人以净化了2周时间调试,还是没有结果,心情十分难过,还往高人指点,谢谢。

5 个解决方案

#1


别调试了。
我有一个简单的生成随即数的类,附送楼主了。

QQ:35091551

#2


.h声明如下
#ifndef H_EASYRAND
#define H_EASYRAND

#include "stdafx.h"

class EasyRandom {
public:
// default conmstructor with defaults of 0&1
EasyRandom(int a=0, int b=1);

// Mutator:
// Sets high and low values
void SetInterval(int a, int b);

// Faclitators:
// Display Random numbers...
int DrawRandomNumber();

// Set seed using current time
void SetTimerSeed();

private:
// Inspectors:
int GetLow();
int GetHigh();

// Data members
int Low, High;

};
#endif

#3


.cpp文件
#include "stdafx.h"
#include <time.h>
#include "EasyRand.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


// Default contructor

EasyRandom::EasyRandom(int a, int b) {
SetInterval(a,b);
}

// Assign Low And High Values to class EasyRandom data members. Use Defaults on error.

void EasyRandom::SetInterval(int a, int b) {
if (a > b) {

AfxMessageBox("Error: HIGH value cannot be less than LOW value!\nUsing defaults: High = 1, Low = 0");
Low = 0;
High = 1;

else {
Low = a;
High = b;
}
}

// Set the seed to generate pseudo-random numbers. Use the current time & date as seed.

void EasyRandom::SetTimerSeed() {
time_t SeedTime;
struct tm SeedDate;
SeedTime = time(0);
SeedDate = *localtime(&SeedTime);
int FinalSeed = SeedTime + SeedDate.tm_mday + (SeedDate.tm_mon+1) + (SeedDate.tm_year+1900);
srand((unsigned int) FinalSeed);
}

// Return the Random number, brief explanation on the method
// Interval : Self explanatory - Get the difference between the High and Low Values 
// RandomOffset = using rand() function to generate random numbers from 0 to Interval-1
// RandomNumber = Add the RandomOffset to the lowest number.

int EasyRandom::DrawRandomNumber() {
int Interval = GetHigh() - GetLow() + 1;
int RandomOffset = rand() % Interval;
int RandomNumber = GetLow() + RandomOffset;
return RandomNumber;
}

// Standard Inpectors - Return High & Low values

int EasyRandom::GetHigh() {
return High;
}

int EasyRandom::GetLow() {
return Low;
}

#4


会不会是其他的原因造成的,我的随机数生成的程序还是很健壮的。

#5


拜托!都写了20000行了,不能从头再来吧
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告