【问题标题】:Weird error in C++ runtimeC++ 运行时中的奇怪错误
【发布时间】:2014-01-06 08:29:53
【问题描述】:

我编写了一个包含二维向量作为组件的代码。每当我输入时,1/2 秒后它就会显示此错误

"Terminate called after throwing an instance of ‘std::bad_alloc’ 
What(): std::bad_alloc

This application has requested the Runtime to terminate it in an unusual way. 
Please contact the application’s support team for more information."

之后,我的电脑速度变慢,代码返回一个整数,直到我关闭 .exe 文件,它才恢复速度。

这背后的原因是什么?如何避免此类错误?\ 我的代码是http://paste.ubuntu.com/6593192/

【问题讨论】:

  • 不提供更多的数据,比如调试结果或者一段源代码,我们一点想法都没有。
  • 第一次发布 som 代码:​​您是否以正确的方式分配指针?你是怎么破坏的?你会循环创建向量吗?
  • 你有没有考虑过你的std::vector > 消耗大量内存

标签: c++ debugging error-handling compiler-errors runtime-error


【解决方案1】:

int i 的重复可能会导致问题?

int main()
{
  **int i;** //1st
  vector<int > a(6); vector<vector<int> > c;  //two vectors
  for(**int i**=0;i<6;++i)//2nd
    cin>>a[i]; //use the 2nd

  c=mco(a,i);//use the 1st, and it is uninitialized yet!

奇怪的是它不是错误。这两个'i'实际上是在同一范围内声明的。就算2nd只在1st for,也没有作用域。

在 VS10 中,我收到了 uninitialized local variable 警告。

【讨论】:

    【解决方案2】:

    您可能正在体验memory leakage。当p 指向单个元素变量时使用delete p 正确删除不需要的动态分配的内存,当p 指向数组时使用delete[] p。如果您不这样做并继续动态分配更多内存,最终您的操作系统将开始交换,从而减慢您的系统,稍后您的程序将最终耗尽内存并在无法时抛出 bad_alloc 异常分配更多内存。

    【讨论】:

      【解决方案3】:

      我认为您的内存不足是因为您的向量分配了大量内存。也许您传递的向量与您的内存相比太大了,或者执行内存分配的代码有缺陷并且分配过度。

      如果你说你的系统在发生这种情况后变慢了,这似乎是合理的,因为当你用完内存时,换出会剧烈地发生并且操作系统正在对各种进程做坏事。

      【讨论】:

        猜你喜欢
        • 2014-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多