我编写了一个代码,其中包含2-D向量作为组件。每当我提交输入时,在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/
答案 0 :(得分:3)
也许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!
奇怪的是,这不是一个错误。这两个'我实际上是在同一范围内宣布的。即使第二个只是第一个,也没有范围。
在VS10中,我收到uninitialized local variable
警告。
答案 1 :(得分:1)
我认为由于向量的内存分配量过大而导致内存不足。也许你传递的向量与内存相比要大,或者执行内存分配的代码存在缺陷并且过度分配。
如果您说系统在发生这种情况后速度变慢,这似乎是合理的,因为当您的内存耗尽时,正在进行交换,并且操作系统正在通过各种进程执行不良操作。
答案 2 :(得分:1)
您可能遇到memory leakage。当delete p
指向单个元素变量时,使用p
正确删除不需要的动态分配内存; delete[] p
指向数组时p
正确删除。如果你不这样做并继续动态分配更多的内存,最终你的操作系统将开始交换,减慢你的系统速度,以后你的程序最终会耗尽内存并在它时抛出bad_alloc
异常无法分配更多内存。