嘿,我正在使用 pdCurses lib 和 stringStream 来计算并制作一个代表时钟的 5 个字符长的字符串。它显示为 00:00、0:00、00.00 或 0.000。但是,当运行我的函数时,我在这部分抛出一个异常:
if((int)time >= 10)
{
if((int)time >= 60)
{
if((int)time >= 600)
{
异常也指出了这一点,说存在访问冲突:
/* verify block type */
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
为什么像 if 语句这样简单的事情会发生这种情况?我该如何解决它?谢谢你的帮助! =)这也是我的功能:
//////////////////////////////////////////// Refresh ///////////////////////////
void Refresh()
{
for(int r = 0;r<nrows;r++)
{
move(r,0);
instr((char*)_contents[r].c_str());
} // make sure this works later
// Insert the current time;
enum{ time_loc_y= 24, time_loc_x= 10 };
long float time = myStopwatch.ElapsedTime();
string time_s= " ";
string min; ss << (int)time%60; ss >> min;
string sec; ss << (int)time/60; ss >> sec;
if((int)time >= 10)
{
if((int)time >= 60)
{
if((int)time >= 600)
{
time_s.insert(0, min); // 00:00
time_s.insert(time_s.begin()+2, ':');
time_s.insert(4, sec);
}
else
{
time_s.insert(1, min); // 0:00
time_s.insert(time_s.begin()+2, ':');
time_s.insert(4, sec);
}
}
else
{
ss.precision(2); ss << time; // 00.00
ss >> time_s;
}
}
else
{
ss.precision(3);
ss << time; // 0.000
ss >> time_s;
}
mvinstr(time_loc_y, time_loc_x, (char*)time_s.c_str());
refresh();
}; // end of function
这里还没有足够的内容,但我的猜测是这个断言来自time_s.insert(0, min)
调用与该行一起的if((int)time >= 600)
- 字符串正在执行一些重新分配,并且堆已损坏(可能是由于函数顶部循环中发生的任何事情,但也可能完全是在其他地方)。
如果您在调试器中运行它并让它捕获断言,那么调用堆栈会是什么样子?
发生了什么:
for(int r = 0;r<nrows;r++){ move(r,0);
instr((char*)_contents[r].c_str());}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)