我在eclipse上使用下面的代码,我得到一个错误终止“在抛出'std :: bad_alloc'的实例后调用what():std :: bad_alloc”。
我有RectInvoice类和Invoice类。
class Invoice {
public:
//...... other functions.....
private:
string name;
Mat im;
int width;
int height;
vector<RectInvoice*> rectInvoiceVector;
};
我在Invoice的方法中使用下面的代码。
// vect : vector<int> *vect;
RectInvoice rect(vect,im,x, y, w ,h);
this->rectInvoiceVector.push_back(&rect);
我想在eclipse.ini文件中更改eclipse内存。但我没有授权这个。我怎么能这样做?
答案 0 :(得分:20)
您的代码中的问题是您无法在全局变量中存储局部变量的内存地址(例如,函数的本地变量):
RectInvoice rect(vect,im,x, y, w ,h);
this->rectInvoiceVector.push_back(&rect);
在那里,&rect
是一个临时地址(存储在函数的激活注册表中),当该函数结束时将被销毁。
代码应该创建一个动态变量:
RectInvoice *rect = new RectInvoice(vect,im,x, y, w ,h);
this->rectInvoiceVector.push_back(rect);
在那里,您使用的堆地址在函数执行结束时不会被销毁。 告诉我它是否适合你。
干杯
答案 1 :(得分:14)
某些东西会抛出std::bad_alloc
类型的异常,表示内存不足。这个例外会一直传播到main
,在那里#&lt;#34;脱落&#34;您的程序并导致您看到的错误消息。
由于此处没有人知道&#34; RectInvoice&#34;,&#34; rectInvoiceVector&#34;,&#34; vect&#34;,&#34; im&#34;等等,我们不能告诉你究竟是什么导致了内存不足的情况。您甚至没有发布您的真实代码,因为w h
看起来像语法错误。