C++ 比较(int)double和(int)int时出现异常

C++ 比较(int)double和(int)int时出现异常,c++,exception,if-statement,double,int,C++,Exception,If Statement,Double,Int,嘿,我正在使用pdCurses库和stringStream来计算并生成一个5个字符长的字符串,它表示一个时钟。它显示为00:00、0:00、00.00或0.000。但是,当运行我的函数时,我会在这一部分抛出一个exeption: if((int)time >= 10) { if((int)time >= 60) { if((int)time >= 600) { 例外情况也指出存在访问冲突: /* verify block typ

嘿,我正在使用pdCurses库和stringStream来计算并生成一个5个字符长的字符串,它表示一个时钟。它显示为00:00、0:00、00.00或0.000。但是,当运行我的函数时,我会在这一部分抛出一个exeption:

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
//刷新///////////////////////////
无效刷新()
{
对于(int r=0;r min;
字符串秒;ss>秒;
如果((整数)时间>=10)
{
如果((整数)时间>=60)
{
如果((整数)时间>=600)
{
时间插入(0,分钟);//00:00
时间插入(时间开始()+2':');
插入时间(4秒);
}
其他的
{
时间插入(1,分钟);//0:00
时间插入(时间开始()+2':');
插入时间(4秒);
}
}
其他的
{
ss.精度(2);ss>时间;
}
}
其他的
{
精密度(3);
ss>时间;
}
mvinstr(time_loc_y,time_loc_x,(char*)time_s.c_str());
刷新();
};//函数结束

这是一个内存系统断言,通常在堆已损坏时通过分配内存来触发。触发器可能是:

time_s.insert(0, min); 

但是,问题出在其他地方--您正在覆盖不应该覆盖的内存。

我认为您对引发异常的原因有误解。
ss
在哪里定义

注意:如果您将代码重新格式化为更规范的样式,如

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 {

对于每行一条语句,异常将更准确地告诉您是哪条语句导致了问题。

这里没有足够的内容,但我猜测断言来自于
时间。插入(0,min)
调用,该调用与
if((int)time>=600)一起出现在行中
-字符串正在执行一些重新分配,而堆已损坏(可能是由于函数顶部的循环中发生的任何事情,但可能完全是由于其他原因)

如果在调试器中运行它并让它捕获断言,那么调用堆栈是什么样子的

发生了什么:

for(int r = 0;r<nrows;r++){ move(r,0); 
                                instr((char*)_contents[r].c_str());} 

for(int r=0;rw在其上使用put(
)的
ss的声明是什么运算符?首先,什么是
long float
?其次,如果
ss
stringstream
,则不能按使用方式连续两次使用
ss
。第二次尝试将导致读取空字符串。第三,问题最有可能是在其他地方发生的堆损坏。您发布的代码不会足以找出问题所在。以下是当我遇到第一个问题时弹出的调用堆栈,如果: