lenrokskate Temat założony przez niniejszego użytkownika |
Czyszczenie pamięci » 2010-04-24 14:20:31 Piszę sobie silnik pod swoją grę. Projekt (dev): http://wrzut.net/irb6vf6wf7mb/silnik.rar.htmlProblem I: Ustawiłem sprawdzanie czy pamięć się wyczyściła. No i się NIE czyści. Dlaczego?Problem II Gdy dołącze plik allegro.h wyskakuje błąd o braku funkcji main.... HELP! |
|
pekfos |
» 2010-04-24 14:24:05 END_OF_MAIN(), coś ci to mówi? |
|
lenrokskate Temat założony przez niniejszego użytkownika |
» 2010-04-24 14:29:00 #pekfos
sorry, zagapiłem się xD
a 1 problem? |
|
pekfos |
» 2010-04-24 14:46:05 nie wiem, nie pobierałem.. Może przy pisaniu sprawdzania też się zagapiłeś.. |
|
lenrokskate Temat założony przez niniejszego użytkownika |
» 2010-04-24 14:48:19 ironia...?
nie, nie zagapiłem się....
w tym projekcie jest ~~12 plików, nie będę wrzucał każdego |
|
DejaVu |
» 2010-04-24 18:01:45 To wklej fragment w którym jest to czyszczenie pamięci (lub kod, który ma go czyścić). My mamy przeszukiwać Twój cały projekt? |
|
lenrokskate Temat założony przez niniejszego użytkownika |
» 2010-04-25 09:27:42 main.cpp #include <iostream> #include <allegro.h> #include "obiekty.h" #include "wyswtl.h"
using std::cout; using std::endl;
int main( char * argv[], int argc ) { gracz * p = new gracz[ 1 ]; mob * m = new mob[ 2 ]; mapa * a = new mapa; p[ 0 ].gracz::wypelnij( 5, 6, 2, 100, "Player" ); m[ 0 ].mob::wypelnij( 10, 11, 12, 90, "mob" ); m[ 1 ].mob::wypelnij( 50, 55, 44, 77, "mob2" ); a->mapa::utworz( 10, 10 ); if( p == NULL ) return 1; if( m == NULL ) return 1; if( a == NULL ) return 1; wysw( p[ 0 ] ); cout << endl; wysw( m[ 0 ] ); cout << endl; wysw( m[ 1 ] ); cout << endl; wysw( a[ 0 ] ); cout << endl; system( "PAUSE" ); end: destruct( p ); destruct( m ); destruct( a ); if( p != NULL || m != NULL || a != NULL ) { system( "PAUSE" ); } return 0; } END_OF_MAIN();
destructor.cpp #include "obiekty.h"
void destruct( gracz * wsk ) { delete[] wsk; wsk = NULL; }
void destruct( mob * wsk ) { delete[] wsk; wsk = NULL; }
void destruct( mapa * wsk ) { delete wsk; wsk = NULL; }
obiekty.h #ifndef OBIEKTY_H #define OBIEKTY_H
#include "gracz.h" #include "mob.h" #include "mapa.h" #include "destructor.h"
#endif
destructor.h #ifndef DES_H #define DES_H
void destruct( gracz * wsk ); void destruct( mob * wsk ); void destruct( mapa * wsk );
#endif
|
|
malan |
» 2010-04-25 10:43:04 Zainteresował mnie Twój problem trochę i posiedziałem nad nim... Po skompilowaniu tego kodu: #include <iostream>
class Kran { public: int a; Kran() { std::cout << "Tworze" << std::endl; }; };
void napraw_kran( Kran * wsk_na_kran ) { delete wsk_na_kran; wsk_na_kran = 0; }
int main() { Kran * KranBle = new Kran; std::cout << KranBle << std::endl; KranBle->a = 1; std::cout << KranBle->a << std::endl; napraw_kran( KranBle ); std::cout << KranBle << std::endl; std::cout << KranBle->a; getchar(); return 0; }; ... występuje ten sam problem co u Ciebie. Szukałem trochę o delete itd., ale konkretnego nic nie znalazłem, a jedyne co mi się nasuwa na chwilę obecną to to, że obiekty tworzone za pomocą operator new muszą być usuwane operatorem delete w bloku, w którym zostały stworzone.Więc ( nie zaczyna się zdania od więc - wiem): #include <iostream>
int main() { int * wsk = new int; { int * wsk2 = new int[ 5 ]; delete[] wsk2; } delete wsk; return 0; } Pewnie się mylę, ale Iname mnie poprawi (zapewne) :). |
|
« 1 » 2 |