我在eclipse上使用下面的代码,并得到一个错误终止“在抛出'std::bad_alloc'what()的实例what():std::bad_alloc实例后调用“。
我有RectInvoice类和Invoice类。
class Invoice {
public:
//...... other functions.....
private:
string name;
Mat im;
int width;
int height;
vector<RectInvoice*> rectInvoiceVector;
};
我在发票的方法上使用以下代码。
// vect : vector<int> *vect;
RectInvoice rect(vect,im,x, y, w ,h);
this->rectInvoiceVector.push_back(&rect);
我想在eclipse.ini文件中更改Eclipse内存。但是我没有为此授权,该怎么办?
最佳答案
您的代码中的问题是,您无法在球形变量中存储局部变量(例如,函数局部)的内存地址:
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);
在这里,您使用的堆地址在函数执行结束时不会被破坏。
告诉我它是否对您有用。
干杯