最近写的程序,其中一个导致栈溢出,不知道原因

fx397993401 2012-07-13 11:14:35
下面这个函数,会在一个循环里面多次调用。
vmap 是全局变量 ,

int getNextNode(int nodeid)
{
if( vmap[nodeid].empty() )
return -1;
//vector<int> li = vmap[nodeid];
int nextnode = vmap[nodeid][0];
return nextnode;
}

下面的版本,是不是有内存泄露

int getNextNode(int nodeid)
{
if( vmap[nodeid].empty() )
return -1;
vector<int> li = vmap[nodeid];
int nextnode = li[0];
return nextnode;
}
...全文
224 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Qyee16 2012-07-14
  • 打赏
  • 举报
回复
int getNextNode(int nodeid)
{
if( vmap[nodeid].empty() )
return -1;
vector<int> li = vmap[nodeid];
int nextnode = li[0];
return nextnode;
}


从代码看,vmap是一个存放了vector<int>类型的容器,
vector<int> li = vmap[nodeid]; 是有可能溢出的

你可以算下vmap[nodeid]中元素的个数,输出来看,不做赋值拷贝。



溢出的可能就是你数据量过大。
fx397993401 2012-07-14
  • 打赏
  • 举报
回复
看任务管理器 ,代码都是跑到 799M的时候 溢出 。
之前代码在xp 上跑 就没这个事

我的笔记本 两个内存 都是2g的 ,win7的系统 i3 的处理器
fx397993401 2012-07-14
  • 打赏
  • 举报
回复

int getRoadSeq(int start,int end)
{
char mstr[20];
sprintf(mstr,"%d+%d",start,end);
string str(mstr);
map<string ,int>::iterator miter = nodeidtoRoad.find(str); // 几次运行都是在这里溢出
if(miter == nodeidtoRoad.end()) return -1;
return miter->second;

}


fx397993401 2012-07-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

int getNextNode(int nodeid)
{
if( vmap[nodeid].empty() )
return -1;
vector<int> li = vmap[nodeid];
int nextnode = li[0];
return nextnode;
}


从代码看,vmap是一个存放了vector<int>类型的容器,
vec……
[/Quote]

记得定位 溢出的时候 vmap[nodeid] 里面就有一个元素

vector<vector<int> > vmap; 这是vmap的定义

vmap.resize(nodeCount*2); 初始化, 这个是在类的构造函数里面初始化的,这个是不是 在栈里面申请空间,但是我之前运行程序的时候 没有报这个错 。
我现在准备把函数 直接写到代码里 去试试
羽飞 2012-07-13
  • 打赏
  • 举报
回复
int getNextNode(int nodeid)
{
if( vmap[nodeid].empty() )
return -1;
vector<int> li = vmap[nodeid]; //这个只是复制拷贝,也没有溢出
int nextnode = li[0];
return nextnode;
}


仅仅看这几句话,是没有内存溢出的,楼主把vmap的定义贴出来

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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