我在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);

在这里,您使用的堆地址在函数执行结束时不会被破坏。
告诉我它是否对您有用。

干杯

10-04 22:54