web-dev-qa-db-fra.com

Erreur C ++: se termine après l'appel d'une instance de 'std :: bad_alloc'

J'utilise le code ci-dessous sur Eclipse et j'obtiens une erreur se terminant "appelée après le lancement d'une instance de 'std :: bad_alloc' what (): std :: bad_alloc".

J'ai les classes RectInvoice et Invoice.

class Invoice {
public:

    //...... other functions.....
private:
   string name;
   Mat im;
   int width;
   int height;
   vector<RectInvoice*> rectInvoiceVector; 
};

Et j'utilise le code ci-dessous sur la méthode d'une facture.

        // vect : vector<int> *vect;

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

Et je veux changer la mémoire Eclipse dans le fichier Eclipse.ini. Mais je ne suis pas autorisé pour cela. Comment puis-je faire cela?

20
andressophia

Le problème dans votre code est que vous ne pouvez pas stocker l'adresse de mémoire d'une variable locale (locale d'une fonction, par exemple) dans une variable globlar:

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

Là, &rect est une adresse temporaire (stockée dans le registre d'activation de la fonction) et sera détruite à la fin de cette fonction.

Le code devrait créer une variable dynamique:

RectInvoice *rect =  new RectInvoice(vect,im,x, y, w ,h);
this->rectInvoiceVector.Push_back(rect);

Vous utilisez une adresse de tas qui ne sera pas détruite à la fin de l'exécution de la fonction. Dis-moi si cela a fonctionné pour toi.

À votre santé

21
Agus Arias

Quelque chose lève une exception de type std::bad_alloc, indiquant que vous avez manqué de mémoire. Cette exception est propagée jusqu'à main, où elle "tombe" de votre programme et provoque le message d'erreur que vous voyez.

Puisque personne ici ne sait ce que sont "RectInvoice", "rectInvoiceVector", "vect", "im" et ainsi de suite, nous ne pouvons pas vous dire exactement ce qui cause la condition de manque de mémoire. Vous n'avez même pas posté votre vrai code, parce que w h ressemble à une erreur de syntaxe.

14
Christian Hackl