Znikająca bez powodu tablica

0

Witam mam przedziwny problem. Otóż mam pewną tablicę dwuwymiarową typu float, która wypełniona jest liczbami NodeTab[][]. W określonym miejscu w kodzie pobieram z tej tablicy liczby aby wyliczyć wartości do uzupełnienia innej tablicy. I tu rzecz niesłychana, po zakończeniu działania tej części programu tablica NodeTab nagle się zeruje ;/. Z niewiadomych mi przyczyn. Używam Dev C++ 4.9.9.2 i Windowsa XP Corporate. Poniżej ta część kodu, która jest problematyczna.

for(i=1; i<=l; i++){
for(j=3; j<=6; j++){
         
         w=1;
          
         if( NodeTab[i][j] != 0 ){
           n = int(NodeTab[i][j]); }          
         for(u=2; u<Ad_s; u++){
           if(VoronoiCorners[n][u]==i){w=0;}}
         if(w!=0){
           u = VoronoiCorners[n][1]+1;
           VoronoiCorners[n][1]=u;
           VoronoiCorners[n][u+1]=i;
         }
}}

Co może być przyczyną kasowania tabeli ? Przed tym kodem wszystko gra a po jego wykonaniu tabela (a przynjamniej spora jej część) się zeruje.

0

W tym miejscu kodu nie ma błędu. Zapewne jest w innym.

0

No właśnie też tak uważam. Kiedy jednak wyrzuciłem tablicę do pliku to przed tą częścią kodu tablica jest cała. Natomiast zaraz za tym kodem kiedy wyrzucę tablice do pliku to 247 początkowych jej elementów zostaje wyzerowana. Nie wiem czy to nie wina kompilatora ? Brak pamięci ? Zielonego pojęcia nie mam.

2

Nie wiem czy to nie wina kompilatora ?

Dev-C++ ma - o ile się nie mylę - ponad 7 lat.
Być może jest to jakiś bug kompilatora; skorzystaj z czegoś normalnego jak Code::Blocks i debuguj kod.

1

@ArturD OMG to o niczym nie znaczy. Możesz ją nadpisywać przez złe odwołania do pamięci, albo ona już dawno wyszła ze scope a ty cały czas sie do niej odwołujesz i jak kodu jest mniej to akurat przypadkiem jeszcze leży na stosie, a jak kodu jest więcej to ją nadpisuje... To jest C++, tutaj takie rzeczy mogą sie dziać, bo twórcy tego języka zakładali że programista wie co robi...

0

@ArturD

Błąd masz prawdopodobnie dlatego że używasz literałów (1,3,6,2) zamiast stałych lub zmiennych.
Dlatego jak już wspomniano wychodzisz w którymś momencie poza zakres.
Ale podałeś za mało kodu żeby to stwierdzić z pewnością.

0

Vpiotr sprawdziłem zakres w jakim się "poruszam" i w żadnym wypadku nie wychodzę poza zakres. Patryk27 z doświadczenia wiem, że jeżeli program mi nie działa to zawsze jest to mój błąd nigdy kompilatora. Program działa tak samo i pod Dev C++ i pod Code Blocks na WinXp i Win7. Shalom pewnie ma racje to musi być coś ze stosem. Sam jednak nie potrafię tego naprawić nie mam tyle skilla. Mógłbym przesłać kod tutaj może ktoś by go przejrzał ale kto ma na to czas? Kodu jest ponad 600 linijek i chyba nikomu nie chce się przez to przedzierać. Macie może pomysł jak mogę sprawdzić czy ta tablica nie jest nadpisywana przez jakieś inne dane, czy nic niepokojącego nie dzieje się ze stosem ?

0

Acha jeżeli usunę tę część kodu, którą pokazałem powyżej wszystko wraca do normy. Problem w tym że nie mogę tego zrobić (oczywiste). Może to jakaś wskazówka?

0

Jedyna wskazówka byłaby taka ze tablica VoronoiCorners jest na stosie obok tablicy NodeTab i wyskakując poza tablicę nadpisujesz elementy.
Odpal to pod debuggerem i leć linijka po linijce sprawdzając co masz w tablicach. Innej rady nie ma.

0

Zamień obie tablice pozycją w funkcji i daj je na końcu listy zmiennych, czyli:

int i,j,w;
int NodeTab[N][K];
int VoronoiCorners[M];

W ten sposób jeśli nadpiszesz coś poza zakresem VoronoiCorners to możliwe że dostaniesz ładne exception - pod debuggerem będziesz wtedy od razu widział w którym momencie się to zadziało.

0

Rzeczywiście ! Znalazłem. Dzięki wam chłopaki ! :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1