View Full Version : [C++] Sto impazzendo, mi crasha su un "for (..)"
Sto diventando pazzo, non riesco a capire perchè ma un programma c++ mi crasha quando esegue un'istruzione for. in pratica
cout << endl << "uno";
if (capacity > limit ) {
cout << "due";
for (q = 1; q < iterazioni; q++) {
cout << "tre";
A video mi manda "uno", mi manda "due"... ma al "tre" NON ci arriva perchè mi crasha con il seguente messaggio:
L'istruzione a "0x0041d641" ha fatto riferimento alla memoria a "0x000001c0". La memoria non poteva essere "read".
Fare clic su OK per terminare l'applicazione
Fare clic su Annulla per eseguire il debug dell'applicazione
Sto decisamente impazzendo, l'unica possibilità credo che sia un problema di gestione della memoria..
Qualcuno ha idee su come venirne fuori?
Uso Eclipse+CDT+MinGW
il problema secondo me risale alla dichiarazione e utilizzo delle variabili "q" e "iterazioni", come sintassi è corretta.......... ma quelle due variabili cosa sono???
RaouL_BennetH
28-06-2005, 12:35
non vedendo nessun'altra parte del codice sorgente, mi sorge però spontanea una domanda in base alla mia (fallace) logica:
se hai: capacity > limit
il programma non dovrebbe fermarsi?
Facendo un discorso meramente intuitivo, leggendo il nome delle variabili, è come se leggessi:
se la capacità è maggiore del limite vai avanti.
Scusa se sparo, ma credo manchino i pezzi essenziali del tuo codice. :)
posta il sorgente intero o almeno il codice di tutta la funzione, è un problema sicuramente banale.
PS: ma fare il debug no eh? :D
secondo me il problema potrebbe essere banalmente nell'assegnameto di "iterazioni", controlla
La situazione è molto più complicata del previsto.
Alcune premesse.. in compilazione non ci sono problemi.. quindi in termini di sintassi il codice è corretto.
in pratica ero convinto che quel
cout << "tre"
non venisse eseguito (almeno credo.. visto che a video non appariva nulla)
successivamente però all'interno di quel for ci sono delle istruzioni nelle quali si butta un un ofstream alcuni valori... e parte di quelle istruzioni viene eseguita :fagiano:
Cerco di farmi capire
cout << endl << "uno";
if (capacity > limit ) {
cout << "due";
for (q = 1; q < iterazioni; q++) {
cout << "tre";
// altra roba....
oggettoofstream << "pippo";
In pratica a video mi appare "uno" e "due", e NON mi appare "tre" ma nel file puntato da oggettoofstream mi appare "pippo".
Mi sembra una cosa totalmente assurda..
Purtroppo non posso postare il codice completo visto che una roba sviluppata all'univ, non scritta da me e quindi nn vi posso dare il tutto (anche perchè sono svariate migliaia di righe di codice e dubito che abbiate la pazienza di leggervele ;) )
Cmq altra cosa...
in pratica prima il codice era fatto così
c'erano varie classi ognuna definite in un .h
pippo.h
pluto.h
gigio.h
topo.h
e infine c'era:
pollo.cpp
che conteneva un main... che caricava da un file i dati da esaminare..
Ora visto che la mia parte di lavoro sulla tesi consiste nell'estendere il lavoro fatto precedentemente ho trasformato pollo in modo da farlo diventare una classe che al posto di leggere i dati da file li ottiene andando a impostare i suoi attributi da un altro file con un main..
ho cambiato pollo.cpp in pollo.h
ora quindi c'è:
pippo.h
pluto.h
gigio.h
topo.h
pollo.h
e
main.cpp
In sostanza.. l'errore mi salta fuori nella fase di elaborazione dei dati.. il fatto è che nella versione con pollo.cpp NON mi dà questo errore.
In quella invece dove l'ho reso una classe mi dà l'errore anche se il codice per quella sezione è IDENTICO..
Sinceramente la cosa più probabile è un problema di gestione della memoria, allocazione ecc. ecc. perchè tra le varie classi ce ne sono alcune che usano grosse matrice e roba del genere.. :(
Son disperato.. nn so quando riuscirò a finire sta cavolo di tesi, se mai la finirò..
Se non stampa "tre" molto probabilmente e' perché lo tiene nel buffer e non arriva a svuotarlo a video prima di crushare, prova a scrivere così
cout << "tre"<<endl;
visto che l'istruzione oggettoofstream << "pippo"; la esegue, l'errore deve essere dopo, quindi metti una stampa a ogni riga di codice dopo per individuarlo.
Buona fortuna
prova a fare un flush dello standard output.
ciao ciao
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.