Błąd wykonywania kodu w C++


(wojtek20124) #1

Nie umiem wyjaśnić, dlaczego występuje błąd w mojej aplikacji. Nie wiem jak go usunąć. Oto plik: main.cpp.txt (622 bajty)

Oto co wiem na temat buga:

  • występuje w linijce nr 18
  • używając debugera wiem, że błąd występuje w rejestrze RDX (EDX)

(nnick) #2

Zrobiłeś iterowanie po elementach tablicy dookoła i bez sensu.

int arg = -1

Czemu od -1? Owszem, przed pierwszym odczytem z tablicy powinieneś mieć tą zmienną zinkrementowaną do 0, ale to i tak jest błędogenne.

Przyjmijmy że masz argc = 1. Przy pierwszym przejściu pętli:

do
{
arg=arg+1; //arg = 0
parametry = parametry + argv[arg]; // odnosimy się do elementu zerowego tablicy
}while(arg!=argc); 0 != 1, warunek spełniony, jeszcze raz lecimy przez pętlę

Drugi cykl pętli:

do
{
arg=arg+1; //arg = 1
parametry = parametry + argv[arg]; //dostęp do elementu o indeksie 1 w tablicy, nie ma takiego elementu, ZONK
}while(arg!=argc);

Póki co to nie patrz w debugerze na rejestry, stosy itd bo to Ci nie pomoże. Albo sam rozkminiaj co program próbuje zrobić upraszczając jego przebieg, albo korzystaj z breakpointów w debugerze - myślę że pokazałoby Ci to gdzie masz błąd.


(wojtek20124) #3

Wiem już jak naprawić. Wystarczy, że przed wejściem do pętli zmniejszę wartość zmiennej argc o 1. Powinno pomóc (raczej). Do programowania mam takiego pecha, że gdy w działającej aplikacji opartej na oknach modalnych zmienię modalne na normalne okna, to cała aplikacja nie działa poprawnie. :slight_smile:


(nnick) #4

Póki co lepiej zostaw w spokoju okienka, CLI na długi długi czas w programowaniu wystarczy i zaoszczędzi Ci frustracji. A co do Twojego rozwiązania - zmniejszenie o 1 wartości argc może i pomoże, ale to jest bardzo złe rozwiązanie. Pomyśl w jaki sposób lepiej iterować po tablicy.