2010-02-10 12 views
10

Sto cercando di usare std: getline() ma ottenere uno strano errore di runtime:C++ utilizzando getline() stampe: puntatore viene liberata non è stata allocata in XCode

malloc: * error for object 0x10000a720: pointer being freed was not allocated * set a breakpoint in malloc_error_break to debug

Questo è il codice che produce questo errore:

//main.cpp 
#include <iostream> 
#include <sstream> 

int main (int argc, char * const argv[]) 
{ 
    std::istringstream my_str("demo string with spaces"); 
    std::string word; 

    while (std::getline(my_str, word, ' ')) { 
     std::cout << word << std::endl; 
    } 
    return 0; 
} 

Prima di ogni parola ottengo questo errore. Dai commenti sembra essere un errore specifico OSX/XCode. Qualche suggerimento su questo?

Aggiornamento: L'errore viene stampato solo in modalità di debug. Se costruisco questo codice in modalità di rilascio, tutto va bene.

Aggiornamento 2: Ulteriori informazioni su tale problema sono disponibili here.

Soluzione:

Set

_GLIBCXX_FULLY_DYNAMIC_STRING=1

nel vostro preprocessore macro in bersagli informazioni scheda costruire.

informazioni

Sistema:

OSX 10.6.2 | XCode 3.2 | g++ 4.2 | debug config for i386

+1

Funziona benissimo sulla mia macchina. Non sto usando un MacBook, quindi forse potrebbe avere qualcosa a che fare con esso, ma su XP con VS2008 si compila e funziona bene. – ihtkwot

+1

Allo stesso modo, compila e funziona senza errori sul mio Powerbook PPC. Mac OS 10.4 con g ++ 4.0.1. E sembra giusto ... – dmckee

+0

Compilare e gira bene in Visual Studio 2008 anche per me. –

risposta

10

Almeno una persona ha segnalato problemi con g ++ 4.2.1 su Apple che sembrano possibilmente correlati alla tua avere a che fare con una configurazione non corretta della libreria standard con la definizione _GLIBCXX_FULLY_DYNAMIC_STRING (non che io capisca niente di quello che sto scrivendo qui).

Si potrebbe ottenere un po 'di un indizio dal thread newsgroup che include questo messaggio:

+0

Questo è tutto. Ho riprodotto il problema e l'ho risolto aggiungendo '_GLIBCXX_FULLY_DYNAMIC_STRING' alla finestra delle impostazioni di destinazione. (Non aggiungerlo alla sezione "Preprocessing" della finestra delle impostazioni di * Project *, che non fa nulla .. XCode, grrrrrr ...) – Potatoswatter

+0

Poiché questo è uno sforzo di squadra, qualcuno vorrebbe segnalare un bug? – Potatoswatter