Pagina 1 di 3

Crash all'accesso di string

MessaggioInviato: 28 nov 2014, 13:54
da boiler
Ciao a tutti

Ho un problema con un programma in C++.
Sono assai arrugginito con i linguaggi di alto livello, quindi si tratterà di qualche errore molto stupido da parte mia, ciononostante non ci arrivo da solo e google non mi ha aiutato.

Sono riuscito a isolare la causa del crash: il seguente spezzone, se compilato non dà né errori né warnings, ma a runtime Windows mi ritorna l'errore "L'applicazione ha smesso di funzionare".

Codice: Seleziona tutto
#include <string>

using namespace std;

int main()
{
    string s;
    s.push_back('b');
    return 0;
}


Molto interessante è che nella console di Code:Blocks non ho crash, succede solo se avvio l'eseguibile direttamente in windows.

Qualcuno mi sa aiutare?
Saluti, Boiler

Re: Crash all'accesso di string

MessaggioInviato: 28 nov 2014, 14:30
da Russell
non sembra ci sia un errore

potrei sugggerirti di mettere 'b' prima in un char e poi passarglielo
oppure di usare la funziona 'append'
raro, ma potrebbe essere un bug del compilatore, quindi prova a prendere l'ultima versione

Re: Crash all'accesso di string

MessaggioInviato: 28 nov 2014, 19:07
da WALTERmwp
Ciao Foto Utenteboiler, ho eseguito l'istruzione, prima rimanendo all'interno dell'ambiente Code::Blocks e, poi, lanciando il ".exe" generato dallo stesso: in entrambi i casi ha funzionato.
Due riferimenti: Versione IDE == 13.12, Compiler == mingw32-g++.exe .
(Ambiente XP Professional SP3).

Saluti

p.s.
//#include <iostream>

Re: Crash all'accesso di string

MessaggioInviato: 29 nov 2014, 1:22
da boiler
Interessante... l'errore probabilmente non è nel codice.
Ho provato adesso sul computer di casa: compila ed esegue senza errori.

L'applicazione mi viene però di 79 KB.
In ufficio, dove avevo il problema, l'applicazione era di soli 19 KB.

Problema di librerie di sistema?

EDIT: stessa configurazione che hai tu, sia a casa che in ufficio, Win7 64 bit.

Boiler

Re: Crash all'accesso di string

MessaggioInviato: 29 nov 2014, 13:38
da Russell
Forse la differenza di dimensioni sta' nel fatto che hai cambiato le opzioni di compilazione e hai attivato le ottimizzazioni?

comunque si, in effetti è strano...
magari reinstalla codeblocks ... e magari fai anche una scansione antivirus...

Re: Crash all'accesso di string

MessaggioInviato: 30 nov 2014, 12:24
da simo85
Probabilmente stai scrivendo in una zona di memoria dove non devi.

Hai usato il debugger ? :-)

Re: Crash all'accesso di string

MessaggioInviato: 30 nov 2014, 14:17
da DirtyDeeds
boiler ha scritto:L'applicazione mi viene però di 79 KB.
In ufficio, dove avevo il problema, l'applicazione era di soli 19 KB.


Questo potrebbe dipendere dal fatto che stai compilando in modalità "debug" e che quindi vengano inserite anche le informazioni sui simboli.

Re: Crash all'accesso di string

MessaggioInviato: 30 nov 2014, 20:06
da boiler
Foto UtenteRussel: il computer su cui non funziona è quello aziendale, sicuramente privo di virus. Posso verificare i flags.

Foto Utentesimo85: ma io lascio l'allocazione della memoria al compiler. Dovrebbe sapere dove scrivere... Il debugger è GDB, non ho mai capito come usarlo.

Foto UtenteDirtyDeeds: negativo, Release in ambo i casi.

Boiler

Re: Crash all'accesso di string

MessaggioInviato: 30 nov 2014, 20:22
da simo85
boiler ha scritto:ma io lascio l'allocazione della memoria al compiler.


Non mi riferivo all'allocazione di memoria.
Volevo dire, magari hai qualche overflow da qualche parte.

Anche io lascio che il compilatore allochi la memoria, ma un giorno ho passato mezz'ora a capire perché un buffer si azzerava a metà ... :shock: ...perché in una funzione a parte usavo la strncpy invece di usare semplicemente la strcpy ... per esempio. :-)

boiler ha scritto:Il debugger è GDB, non ho mai capito come usarlo.

gdb non è poi cosi difficile da usare. Con un po' di pratica lo si usa facilmente. Prima di consultare la documentazione ufficiale puoi leggere qui: http://www.cs.cmu.edu/~gilpin/tutorial/

Re: Crash all'accesso di string

MessaggioInviato: 30 nov 2014, 23:25
da DirtyDeeds
Foto UtenteDirtyDeeds: negativo, Release in ambo i casi.


Puoi riportare la riga di comando completa con cui vengono chiamati compilatore e linker?