Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Seraphis

Borland C++ Builder - PointerException

Polecane posty

Witam,

No wiec tak.. Pisze sobie programik do rozpoznawania odciskow palcow, ale napotkalem pewien problem, z ktorym nie potrafie sobie poradzic (albo zbyt slepy jestem, albo zbyt glupi :-P). Chodzi tu o fragment, gdzie tworze sobie tablice int tab[200][3], gdzie zapisuje sobie punkty x, y i wartosc piksela w tym punkcie. Tablica Jest tworzona prawidlowo, bo sobie ja nawet rekord po rekordzie wypisywalem. Potem probuje zapisywac do pliku. Niby sie zapisuje, ale dodaje mi dodatkowy rekord w postaci (zapisuje do pliku w formacie x : y : wartosc): 22 : 0 : 0, mimo, ze takiego punktu nie ma nawet na obrazie (w sensie o wartosci 0 przy tych wspolrzednych). Po zapisaniu do pliku, jak probuje zamknac cala aplikacje, wywala mi blad "EInvalidPointer with message 'Invalid pointer operation' "..

Tutaj fragment kodu, gdzie wypisuje sobie zawartosc tablicy i zapisuje ja do pliku:

int tempTab[] = {0, 0, 0};

for(int i = 0; i < 200; i++)
        ShowMessage(IntToStr(i) + " w pamieci! " + IntToStr(tab[i][0]) + " " + IntToStr(tab[i][1]) + " " + IntToStr(tab[i][2]));


ofstream plik1;
plik1.open("D:\\plik.txt");
for (int i = 0; i < 200; i++)
{
        ShowMessage(IntToStr(i) + " zapisuje do pliku: " + IntToStr(tab[i][0]) + " " + IntToStr(tab[i][1]) + " " + IntToStr(tab[i][2]));
        plik1 << tab[i][0] << " : " << tab[i][1] << " : " << tab[i][2] << endl;
        ShowMessage(IntToStr(i) + " zapisalem w pliku: " + IntToStr(tab[i][0]) + " " + IntToStr(tab[i][1]) + " " + IntToStr(tab[i][2]));
}

plik1.close();

Ma ktos jakis pomysl chociazby gdzie szukac problemu..?

EDIT: Ok, znalazlem problem : najwyrazniej sortowanie, ktore program wykonuje pozniej wykraczalo poza obszar tablicy (chociaz wydaje mi sie, ze nie powinno x.X)

Link do komentarza
Udostępnij na innych stronach

Co to znaczy "Niby sie zapisuje, ale dodaje mi dodatkowy rekord" ?

Masz pętle na 200 przebiegów, a w pliku rekordów jest 201 ? Czy może rekordów w pliku powinno być 199, a pętla ma 200 przebiegów ?

Jeżeli masz pętle for (unsigned int i = 0; i < 200; i++) i nic nie majstrujesz wewnątrz pętli to, to pętla wykona się 200 razy.

Co do wyjątku, to nie wiem skąd się bierze. Może użyj debugera. Borland builder chyba ma takie cudo.

Link do komentarza
Udostępnij na innych stronach

Tak, petla byla o jeden za duza. Robilem sortowanie babelkowe, wiec musiala sie "podpiac" jakas wartosc w pamieci, ktora byla zaraz za tablica. Potem ta wartosc przesuwala sie wraz ze wszystkimi sortowanymi elementami i wyladowala na koncu zapisanych komorek tablicy (bo punktow zapisywanych bylo mniej niz rozmiar tablicy).

Pewnie tez stad ten wyjatek wskaznika.

Link do komentarza
Udostępnij na innych stronach

Jak narazie dziala, wiec wydaje sie reszta poprawnie :-)

Zostalo mi tylko zrobienie odnajdywania punktu odniesienia, potem minucje i mozna sie wziac za implementacje sieci neuronowej.

Teraz zaluje, ze ten temat nazwalem, jak nazwalem, bo w razie problemow moglbym dalej w nim pisac, a nie zakladac nowy..

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...