Ошибка С++: завершение вызова после вызова экземпляра 'std:: bad_alloc'

Я использую ниже код на 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; 
};

И я использую ниже код в методе счета-фактуры.

        // vect : vector<int> *vect;

        RectInvoice rect(vect,im,x, y, w ,h);
        this->rectInvoiceVector.push_back(&rect);

И я хочу изменить память eclipse в файле eclipse.ini. Но я не уполномочен на это. Как я могу это сделать?

Ответ 1

Проблема в вашем коде заключается в том, что вы не можете сохранить адрес памяти локальной переменной (например, локально для функции) в переменной globlar:

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

Там вы используете адрес кучи, который не будет уничтожен в конце выполнения функции. Скажите, если это сработало для вас.

Приветствия

Ответ 2

Что-то генерирует исключение типа std::bad_alloc, указывая на то, что у вас закончилась нехватка памяти. Это исключение распространяется до main, где оно "отваливается" от вашей программы и вызывает сообщение об ошибке.

Поскольку никто здесь не знает, что такое "RectInvoice", "rectInvoiceVector", "vect", "im" и т.д., мы не можем сказать вам, что именно вызывает условие нехватки памяти. Вы даже не опубликовали свой реальный код, потому что w h выглядит как синтаксическая ошибка.