Oppure

Loading
06/07/06 14:27
Oligoatria
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.;)
aaa
11/07/06 17:46
Zani88
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!!!
aaa
13/07/06 10:36
Oligoatria
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
aaa
13/07/06 21:58
pierotofy
Meglio così, un problema di meno.

Comunque mi congratulo con te Oligoatria, ho provato una delle beta del progetto ed è veramente strabiliante. Complimenti davvero!
Il mio blog: piero.dev
15/07/06 18:55
Oligoatria
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:
aaa