Ошибка С++: завершение вызова после вызова экземпляра '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
выглядит как синтаксическая ошибка.