[C++]0xC0000005: Access violation writing location 0xCCCCCCCC
Ostatnio zmodyfikowano 2013-10-20 16:21
LimaSxD Temat założony przez niniejszego użytkownika |
[C++]0xC0000005: Access violation writing location 0xCCCCCCCC » 2013-10-20 00:18:43 Cześć, mam problem z kompilacją kodu: ParticleSystem::ParticleSystem( sf::Vector2f & _emitter, sf::Time & _lifetime, unsigned int count, unsigned int extraarraysize ) : emitter( _emitter ) , vertices( sf::LinesStrip ) , lifetime( _lifetime ) , arraysize( 1 ) { maxarraysize = 60 * _lifetime.asSeconds() * extraarraysize; Particle * particlesarray = new Particle[ maxarraysize ]; }
void ParticleSystem::addParticle( float _angle, float _speed, sf::Color & _color ) { Particle newParticle; float angle = _angle * 3.14f / 180.f; newParticle.velocity = sf::Vector2f( std::cos( angle ) * _speed, std::sin( angle ) * _speed ); newParticle.lifetime = lifetime - sf::milliseconds(( std::rand() % 200 ) ); newParticle.vertex.color = _color; newParticle.vertex.position = emitter; particlesarray[ arraysize ] = newParticle; arraysize++; }
Ponieważ na Debugu wywala mi błąd: First-chance exception at 0x0123701A in Game1.exe: 0xC0000005: Access violation writing location 0xCCCCCCCC. Unhandled exception at 0x0123701A in Game1.exe: 0xC0000005: Access violation writing location 0xCCCCCCCC.
Przeszukałem kilka godzin na google i nic nie znalazłem co rozwiązało by mój problem więc jeżeli ktoś wie jak rozwiązać ten problem, proszę o odpowiedź. |
|
Mrovqa |
» 2013-10-20 00:45:36 particlesarray[ arraysize ] = newParticle;
Raz, to debugger, a nie kompilator, a dwa - jesteś na 100% pewien, że nie przekraczasz rozmiaru tablicy? Nigdzie nie sprawdzasz, czy w tablicy zmieści się jeszcze jedna cząsteczka. |
|
killjoy |
» 2013-10-20 00:51:44 Tak na moje oko to tworzysz lokalny wskaźnik na tablice w konstruktorze Particle * particlesarray = new Particle[ maxarraysize ]; , a potem chcesz się odwołać do pola klasy particlesarray[ arraysize ]; , gdzie są śmieci (tudzież jest puste), bo na zaalokowaną pamięć wskazywał wskaźnik lokalny w konstruktorze. |
|
LimaSxD Temat założony przez niniejszego użytkownika |
» 2013-10-20 00:52:36 Tak jestem pewien ponieważ w construktorze ustawiam arraysize na 0, a na Debugu widzę że jest 0. |
|
Mrovqa |
» 2013-10-20 16:21:06 Pierwsza sprawa, to posłuchaj @killjoypl - ty nie modyfikujesz składnika klasy, tylko adres przechowujesz w zmiennej lokalnej, która przestaje istnieć od razu po wyjściu z konstruktora. Tak jestem pewien ponieważ w construktorze ustawiam arraysize na 0, a na Debugu widzę że jest 0. |
Druga sprawa jest taka, że w zamieszczonym kodzie podajesz tam jedynkę - wkleiłeś zły kod? Trzecia sprawa - co z tego, że zmienną inicjalizujesz? Nie widzisz tego, że arraysize zwiększa się za każdym wywołaniem metody? Dla dobrej praktyki powinieneś sprawdzać czy możesz dodać nową cząsteczkę - kiedyś będziesz chciał wykorzystać kod i będziesz się dziwił, dlaczego gra "sama z siebie przestała dobrze działać". |
|
« 1 » |