Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problemi di memoria
Forum - C/C++ - Problemi di memoria

Avatar
Oligoatria (Founder Member)
Pro


Messaggi: 79
Iscritto: 20/02/2006

Segnala al moderatore
Postato alle 16:27
Giovedì, 06/07/2006
Nel progetto SDL_game alloco dinamicamente la memoria con gli operatori  new  e  delete.

Qui di seguito riporto il mio "diario di progettazione":

// ** Utilizzo Microsoft Visual Studio 6.0 **


Questo problema non mi fa andare avanti!

Per chi volesse dare un'occhiata per risolvere
questo interessante problema |
                             |
                             V

Fondamentale: il file "livelli\level1.oli" // è un file di testo in base al quale
                                              vengono impostati gli oggetti del livello
                                          -- per ora solo stone
I sintomi:
    se nel file ci sono oggetti
      <= 2   --> nessun sintomo, tutto si svolge correttamente
      =3     --> in fase di debug (con F5) e con l'eseguibile ( già compilato, non utilizzato da Visual Studio )
             nessuno, se lo eseguo da Visual Studio mi dà un errore del programma riguardante
                 la memoria.
      >3     --> l'errore appena citato si verifica sempre

L'ultima modifica di codice fatta prima dell'errore:
   (nel file Avventura.cpp, il principale del progetto)
    Ho creato una lista puntata di oggetti _ Stone _ ;
   se non si verificasse la situzione ambigua sopra
   introdotta con " =3 " penserei ad un errore
   nell'impostazione della lista, ma a questo punto
   VORREI CAPIRE PRECISAMENTE COSA ACCADE.
   Speriamo che sia, come accade spesso, un problema
   banalmente risolvibile,

                                                                 Oligoatria

6_07_2006

Ora mi è chiaro che è un errore che riguarda la
memoria disponibile e che in fase di debug (con F5)
non dà lo stesso errore perchè prosegue con
l'esecuzione anche se gli oggetti non stati tutti
allocati; in poche parole, non funziona correttamente.

************************
La cosa che non capisco è perchè se dichiaro ( ad esempio )  
4 oggetti stone funziona, ma se li alloco dinamicamente
durante il runtime mi genera questo errore.
Quello che mi rode è che l'operatore new non restituisce
NULL come dovrebbe fare se non c'è memoria disponibile
e che anche se mettessi try+catch non potrei utilizzare
comunque gli oggetti interessati.
************************
                                                                 Oligoatria

-------
P.S.: ora mi occuperò della pubblicazione dei sorgenti.;)


Ci vuole pazienza con chi ne sà meno di te.. e spera che quelli che ne sanno più di te a cui chiedi aiuto facciano lo stesso

http://www.oligoatria.altervista.org - in allestimento..
PM Quote
Avatar
Zani88 (Member)
Pro


Messaggi: 136
Iscritto: 07/05/2006

Segnala al moderatore
Postato alle 19:46
Martedì, 11/07/2006
Io nn conosco il C++ ma conosco abbastanza bene il C. Allora l'allocazione dinamica crea un casino di problemi perchè e facile sbagliare e difficile capire cosa è sbagliato. Ti consiglio di controllare se esegui la free e poi magari cerchi di utilizzare ancora il puntatore che hai appena liberato o altrimenti di riscrivere la funzione che nn va a parte rifacendo il ragionamento e vedere se è uguale a quella iniziale... In ogni caso a spetto che pubblichi i sorgenti!!!


"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." (Robert Firth)
PM Quote
Avatar
Oligoatria (Founder Member)
Pro


Messaggi: 79
Iscritto: 20/02/2006

Segnala al moderatore
Postato alle 12:36
Giovedì, 13/07/2006
AAAAAAAAAAaahhhhhhhhh!!!
Fantastico ho trovato il problema!!!
Ho appena pubblicato la modifica, anche nei sorgenti,
(per chi ha cercato di cimentarsi nell'analisi della BETA). Si trattava di un errore nell'apertura del file level.oli (praticamente un .txt), il cui contenuto salvavo in una stringa. Le cause del crash sono due:
1 --> davo una dimensione arbitraria alla stringa,
       grave ed ingenuo sbaglio.
2 --> sostituivo lo zero alle virgolette, per      
       facilitare la lettura dei dati. Ora ho
       adattato il tutto per permettere questa
       sostituzione.

Grazie mille per l'interessamento, Zani88, farò tesoro dei tuoi consigli.
                                        Oligoatria

P.S.: hai ragione, con l'allocazione dinamica a volte ci si ferma su banalità, purtroppo difficili da trovare.:k::D


Ci vuole pazienza con chi ne sà meno di te.. e spera che quelli che ne sanno più di te a cui chiedi aiuto facciano lo stesso

http://www.oligoatria.altervista.org - in allestimento..
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6116
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 23:58
Giovedì, 13/07/2006
Meglio così, un problema di meno.

Comunque mi congratulo con te Oligoatria, ho provato una delle beta del progetto ed è veramente strabiliante. Complimenti davvero!


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
Oligoatria (Founder Member)
Pro


Messaggi: 79
Iscritto: 20/02/2006

Segnala al moderatore
Postato alle 20:55
Sabato, 15/07/2006
Ti ringrazio molto, ma non è ancora tutto:
stò impostando un tool per la creazione dei livelli.. ci sono molto vicino. All'inizio volevo farlo in C++, poi ho capito che sarebbe diventato troppo complicato, così ho deciso di realizzarlo in Delphi (in fondo si tratta solo di creare un file di testo).

:D

Scusa se rispondo spesso con qualche giorno di ritardo, ma ho la 56k e mi connetto poco.

Ne approfitto per comunicare che sarò inattivo per tutta la prossima settimana (vacanza with my father).

Buon lavoro:k:


Ci vuole pazienza con chi ne sà meno di te.. e spera che quelli che ne sanno più di te a cui chiedi aiuto facciano lo stesso

http://www.oligoatria.altervista.org - in allestimento..
PM Quote