Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Process finished with exit code -1073741819 (0xC0000005)

Ostatnio zmodyfikowano 2021-04-17 20:01
Autor Wiadomość
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
C/C++
#include <iostream>
#include "SandParticle.h"
#include "AirParticle.h"

#define SIZE 20

using namespace std;

void fillWithAir( Particle * tab[ SIZE ][ SIZE ] ); ///PAMIĘTAJ O *. * JEST BARDZO WAŻNA
void showFrame( Particle * tab[ SIZE ][ SIZE ] );
void generateFrame( Particle * tab[ SIZE ][ SIZE ] );
void cleanup( Particle * tab[ SIZE ][ SIZE ] );

int main() {
   
Particle * board[ SIZE ][ SIZE ]; ///[Kolumna][WIersz] tak jak w układzie kartezjańskim prostokątnym
   
fillWithAir( board );
   
//board[10][10] = new SandParticle;
   
showFrame( board );
   
   
cleanup( board );
}


//Functions
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:
C/C++
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.
P-178441
pekfos
» 2021-04-17 19:36:45
tab[ i ][ i ] = new AirParticle;

2 razy i. To samo w cleanup().
P-178442
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?
P-178443
pekfos
» 2021-04-17 19:43:13
Nie wypełniasz całej tablicy i używasz potem niezainicjalizowanych adresów. Ale nie wierz na słowo:
» Kurs C++» Poziom XDebugowanie na przykładzie Visual Studio 2017 lekcja
P-178444
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
P-178445
« 1 »
  Strona 1 z 1