Process finished with exit code -1073741819 (0xC0000005)
Ostatnio zmodyfikowano 2021-04-17 20:01
13Antoni Temat założony przez niniejszego użytkownika |
Process finished with exit code -1073741819 (0xC0000005) » 2021-04-17 18:13:45 Cześć, dzisiaj już po raz trzeci Mam następujący problem: kompilator w czasie kompilacji nie zwraca żadnych błędów, ALE próba uruchomienia programu bardzo szybko kończy się w ten sposób Process finished with exit code -1073741819 (0xC0000005)
W internecie udało mi się już naleźć, że błąd odpowiada chyba za próbę uzyskania dostępu do pamięci, do której program dostępu nie ma. Nie mam jednak pojęcia które miejsce w kodzie odpowiada za ten stan rzeczy, więc proszę o pomoc. Kod wygląda tak #include <iostream> #include "SandParticle.h" #include "AirParticle.h"
#define SIZE 20
using namespace std;
void fillWithAir( Particle * tab[ SIZE ][ SIZE ] ); void showFrame( Particle * tab[ SIZE ][ SIZE ] ); void generateFrame( Particle * tab[ SIZE ][ SIZE ] ); void cleanup( Particle * tab[ SIZE ][ SIZE ] );
int main() { Particle * board[ SIZE ][ SIZE ]; fillWithAir( board ); showFrame( board ); cleanup( board ); }
void fillWithAir( Particle * tab[ SIZE ][ SIZE ] ) { for( int i = 0; i < SIZE; i++ ) { for( int j = 0; j < SIZE; j++ ) tab[ i ][ i ] = new AirParticle; } }
void showFrame( Particle * tab[ SIZE ][ SIZE ] ) { for( int i = SIZE - 1; i >= 0; i-- ) { for( int j = 0; j < SIZE; j++ ) { switch( tab[ j ][ i ]->getType() ) { case 0: cout << " "; break; case 1: cout << "O"; break; case 2: cout << "*"; break; default: cout << " "; break; } } cout << endl; } } void cleanup( Particle * tab[ SIZE ][ SIZE ] ) { for( int i = 0; i < SIZE; i++ ) { for( int j = 0; j < SIZE; j++ ) delete tab[ i ][ i ]; } }
Nie wiem, czy to ważne, ale destruktory klas wyglądają tak: virtual ~Particle() = default; ~AirParticle() override = default; ~SandParticle() override = default;
Oczywiście są one w osobnych plikach, wrzucam je tu razem, żeby było mniej bałaganu. Za każdą pomoc/sugestię będę bardzo wdzięczny. |
|
pekfos |
» 2021-04-17 19:36:45 tab[ i ][ i ] = new AirParticle; 2 razy i. To samo w cleanup(). |
|
13Antoni Temat założony przez niniejszego użytkownika |
» 2021-04-17 19:41:55 Dziękuję za pomoc, rozwiązuje to problem, nie mniej jednak rodzi to kolejne pytanie tablica jest kwadratowa, więc więc nie ma możliwości, żeby w jakiś sposób to przypisanie próbowało wpisać coś poza jej zakres, więc z skąd tak na prawdę bierze się ten błąd? |
|
pekfos |
» 2021-04-17 19:43:13 |
|
13Antoni Temat założony przez niniejszego użytkownika |
» 2021-04-17 20:01:05 W sumie brzmi to logicznie. Doczytam sobie co się dzieje, gdy nie inicjalizujemy zmiennej wskaźnikowej. Jeszcze raz dziękuję za pomoc |
|
« 1 » |