错误诊断的问题

hightemple 2003-10-22 11:21:25
我编的一个程序,需要对一个算法的结果进行两百次统计平均,就是一个算法要重复200次,但是程序总是算到百把次的时候会出现中断(大概四个小时吧),提示dsw出现错误,偶推断是内存溢出,但是我对定义的类每次都用了析构函数,能够析构的变量都在析构函数中析构了,但是情况仍然没有改善,请教高手是什么问题,遇到这种问题怎么分析,有没有什么方法找到从出错的原因。
...全文
12 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hightemple 2003-10-23
  • 打赏
  • 举报
回复
可以上传程序吗?
高手帮我看看。
Lymtics 2003-10-22
  • 打赏
  • 举报
回复
在VC++中DEBUG模式会带来很多的调试代码,很占戋空间的..

我是由dsw猜想到是是调试代码作怪..你看看.opt文件的大小
hightemple 2003-10-22
  • 打赏
  • 举报
回复
我是运行的时候出的错,和编译有关系吗?
hightemple 2003-10-22
  • 打赏
  • 举报
回复
#include "WDMNetwork.h"
#include "SDPair.h"

class CoreControl
{
public:
CoreControl();
~CoreControl();
bool NetConnet_warshall(const WDMNetwork &g);
void shortestpath_DIJ(const int v,const WDMNetwork g);
void shortestpath_DJ_ALL(const WDMNetwork g);
void shortestpath_FlOYD(const WDMNetwork g);
void shortestpath_MNH(const int v,const WDMNetwork g);
void shortestpath_MNH_All(const WDMNetwork g);
int GetLargestLoad();

void LPSet(const WDMNetwork g);//光路径按长度分组,有相同间距的节点对分成一组
bool Lpcm(WDMNetwork g,vector<SDPair> set,SDPair lp,int s,int e); //光路径冲突函数,两条光路径冲突返回true
bool Lpcm_MNH(WDMNetwork g,vector<SDPair> set,SDPair &lp,int s,int e); //光路径冲突函数,两条光路径冲突返回true
//针对MNH算法
void FirstFit(const WDMNetwork g); //firstfit波长分配算法,长路径优先
void FirstFit_shortestfist(const WDMNetwork g);//firstfit波长分配算法,短路径优先
void LinkLoad(vector<vector<SDPair> > sdPairs); //求各链路的载荷;
void UpdateRouteTab();
void LinkSet(vector<Link> opLink);
void ExchangeRoute(SDPair &sdPair,int i);
bool SearchMNHPath(); //寻找可以替换当前路由的新的路径,成功返回路径序号,失败返回-1
int FindUnusedPath(SDPair sdPairs,int cur);//在使用最高载荷的节点对间看能否找到未使用的且绕过此链路的路径
bool FindNewPath(int u,int v,int cur);
void UpdateLinkLoad(vector<SDPair> lpnum);
void PrintOptimizedRoute();
int RoutLinkSum(SDPair sd,int s);//计算一条路径上所以链路的负载和
bool LL_FindNewPath(int u,int v,int cur);//针对LL_MNH算法
int LL_FindUnusedPath(SDPair sdPairs,int cur);//增加一个判定条件,该路由的链路权值应该最大
bool LL_SearchMNHPath();


void Shortest_MNH(const WDMNetwork &g);//改进路由算法,通过改变负载最重的链路的路由来降低使用波长数
void LL_MNH(const WDMNetwork &g);//基于MNH的链路最大权值算法如果某一链路上通过的路径数目越少,那么该链路被选择的概率越大。




protected:

private:
vector<int> dist; //辅助向量,表示当前所找到的从v到终点vi的最短路径长度
vector<vector<SDPair> > sdPairs; //网络的节点对
int diam; //网络直径
vector<vector<SDPair> > lenSet; //光路径按长度分组,有相同间距的节点对分成一组
vector<Link> opLink; //1光链路
vector<Link> opLinkSet; //光链路按负载从大到小排列
int limitDB; //由距离确定的网络下限
int frontLoad; //frontLoad保存更换路由前最重负载链路的最小值
vector<vector<SDPair> > frontsdPairs; //保存更新前节点对间的路由状态
vector<Link> frontLinkSet; //保存链路负载次序
SDPair changedRoute; //被更换的节点对路由

};

CoreControl::CoreControl(void)
{
dist.resize(0);
sdPairs.resize(0);
diam=0;
lenSet.resize(0);
opLink.resize(0);
opLinkSet.resize(0);
frontLoad=1000;
}

CoreControl::~CoreControl()
{
dist.~vector();
sdPairs.~vector();
lenSet.~vector();
opLink.~vector();
opLinkSet.~vector();
frontsdPairs.~vector();
frontLinkSet.~vector();
cout<<"Complete the destruction."<<endl;
}
#include "head.h"

class WDMNetwork
{
public:
int curNum; //当前网络的节点数
int nodeNum; //节点数
int linkNum; //连接节点的链路数
int limitPB;//网络割集理论确定的下限

vector<int> nodes;
vector<vector<int> > sdLinks;
vector<vector<int> > staticLinks;//保存第一次输入网络的连接矩阵,不随次数而变
vector<int> newSeq; //保存更换后的序号顺序
int max; //表示权值的极限值
int net; //net=1表示带权网络
int mark; //mark=1表示有向网络


private:
friend class CoreControl;
friend class SDPair;
friend class Link;
public:
WDMNetwork(); //构造空的网络
WDMNetwork(int mark=1,int net=0,int max=1000);

void PrintNetMatrix();
void RandChangeNode();
void PrintNewSeq();
void SetNewSeq();


// friend std::istream operator>>(istream &in,WDMNetwork &g);//输入网络的顶点和链路的信息
// friend ostream &WDMNetwork::operator<<(ostream &out,WDMNetwork &g); //输出网络的顶点和链路的信息

};
std::istream &operator>>(istream &in,WDMNetwork &g);
std::ostream &operator<<(ostream &out,WDMNetwork &g);

WDMNetwork::WDMNetwork()
{
nodeNum=curNum=0;
linkNum=0;
mark=0;
net=0;
max=1000;
}


WDMNetwork::WDMNetwork(int mark,int net,int max)
{
nodeNum=curNum=0;
linkNum=0;
WDMNetwork::mark=mark;
WDMNetwork::net=net;
WDMNetwork::max=max;
}

#include "CoreControl.h"


main()
{

WDMNetwork g(1,1);
cin>>g;
cout<<g;
g.PrintNetMatrix();
std::ofstream file("statics1.txt");
for(int i=0;i<200;i++)
{
cout<<"\n\n\n";
cout<<"现在正在对网络进行第"<<i+1<<"次优化..........."<<endl;
CoreControl core;
g.RandChangeNode();
g.PrintNetMatrix();
core.LL_MNH(g);
core.PrintOptimizedRoute();
file<<core.GetLargestLoad()<<" "<<endl;
}
//////////////////////////////////////////////////////////////////////////////////////

return 1;
}
Lymtics 2003-10-22
  • 打赏
  • 举报
回复
看看编译选项是不是RESLEASE..

VC的调试代码可能在捣鬼
ttlb 2003-10-22
  • 打赏
  • 举报
回复
我只知道,可能编译时候出错的,千万不要拖到运行时,尽量让编译器找到更多的错误。

另外,dsw 是 vc 工作区文件的扩展名,你看看会不会是别处的问题。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧