Domanda

Ho del codice c ++ che sto usando per i test in cui la prima riga è una chiamata da aprire nel tentativo di caricare il mio oggetto condiviso. Dopo aver colpito questa linea ottengo il seguente errore:

Terminate called after throwing an instance of std::bad_alloc: 
   what() : St9bad_alloc

Ho aumentato la memoria (free -m ora riporta che ho ~ 120 MB gratuiti quando il mio exe è caricato in gdb) e ricevo ancora lo stesso messaggio.

Chiunque abbia qualche idea su cos'altro potrebbe causare questo & amp; cosa posso fare per risolverlo?

È stato utile?

Soluzione

Dai un'occhiata al C ++ dlopen mini HOWTO , spero che ti aiuti.

Altri suggerimenti

Suppongo che Dlopen non abbia nulla a che fare con questo. dlopen () è una funzione del linguaggio C e non può generare un'eccezione. Ciò che può effettivamente essere lanciato sono le funzioni di inizializzazione nei tuoi oggetti condivisi, ad esempio le espressioni che assegni ai tuoi oggetti statici. Ad esempio, se scrivi questo nell'oggetto condiviso che stai caricando, potrebbe bloccarsi con bad_alloc:

// dso.cpp start
#include <dso.h>

Object* instance = new Object();

// the rest of the file

Ma le cose dlopen sono totalmente irrilevanti, suppongo.

Probabilmente è perché non riesce a trovare tutte le sue dipendenze.

Cambia la directory nella directory in cui risiede la tua applicazione.
Quindi utilizzare nm sulla libreria condivisa che si sta tentando di caricare (stesso percorso utilizzato nel codice).
Questo mostrerà eventuali dipendenze mancanti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top