Debugger, a .exe

0

Mam problem, którego przyczyny nie jestem w stanie się domyślić. Robię program, który ma coś tam sobie robić. Między innymi jest to znalezienie 'cyklu' w grafie (reprezentacja: macierz sąsiedztwa). 'Cykl' piszę w '', ponieważ nie jest to tak do końca cykl z punktu widzenia matematyki - chodzi o to, żeby odwiedzić wszystkie wierzchołki i wrócić do początkowego nawet jeśli trzeba będzie do jednego wierzchołka dostać się i wrócić po tej samej krawędzi (liczba krawędzi połączonych z wierzchołkiem = 1). Szukanie tego 'cyklu' robię rekurencyjnie, a odwiedzone wierzchołki koloruję na szaro (kolor[i]=1 - szary, kolor[i]=0 - bialy, nieodwiedzony), trochę jak w DFS-ie. Algorytm daje(a raczej powinien dawać) mało optymalny cykl - to nie przeszkadza, cały projekt ma polegać właśnie na poprawianiu tego wyniku.

Tyle teorii. Teraz problem. Program po uruchomieniu wywala informacje, że brak odpowiedzi i że przestał działać. Nie wiem dlaczego, więc uruchamiam debugger i... ta dam! działa! Wszystkie zmienne są takie jak powinny być, cykl dostaje taki jakiego oczekiwałem, program kończy pomyślnie działanie. Dzieje się tak tylko przy pracy z debuggerem i ruchu linijka po linijce. Jak uruchomię normalnie program - brak odpowiedzi. Korzystam z Code Blocks 10.05. Załączam projekt, o którym mowa.

Kompletnie nie mam koncepcji w czym tkwi problem? Jak to jest możliwe, że w debuggerze działa, a bez niego już nie? Czy to może być wina środowiska, czy jednak raczej moja?

Z góry dziękuję za każdą pomoc.

0

Podczas debugowania pewne rzeczy jak pisanie nie po swojej pamięci czasami mogą ci "ujść na sucho". Przeanalizuj porządnie swój program, zobacz czy nie odwołujesz się do nieistniejącego indeksu czy nie wychodzisz gdzieś za daleko pętlą.

0

wypróbuj metodę "print it". przed wykonaniem jakiegoś podejrzanego kodu wpisuj jakiś tekst do pliku. Później możesz łatwo sprawdzić jaki fragment kodu co napsuł.

0

Dobra. Przejrzę jeszcze raz ten kod i spróbuję wypisywaniem coś zdziałać. Chociaż teoretycznie robiłem kroki z tego kodu na kartce sobie i niby wszystko w porządku było.

Jakby co interesujący mnie plik to 'cykle.cpp' - funckja 'f_cykl()'

0

Sprawdź czy każda zmienna masz zainicjowaną, przy debugowaniu pamięć jest odrazy inicjowana zerami, w relase nie, więc każda zmienna ma na początku wartość która była w tym obszarze pamięci przed pojawieniem się zmiennej czyli innymi słowy śmieci. Nie napisałeś jakiego środowiska używasz ale np w visual studio możesz podejrzeć co jest w danej zmiennej w danej chwili ;)

0

Ja bym to odpalił jeszcze pod valgrindem :)

0

Jeden błąd masz na pewno:

//!@todo Nie wiem dlaczego w funkcji sciezka wszystko dziala i tworzy dobra sciezke, a po wyjsciu z niej pojawiaja sie jakies krzaczki. Wskazniki sa nie tak?
void sciezka(int v, double nasycenie, int wersja, int licznik, char *fold)
{
//...
    fold = (char *)folder.c_str();
//...
}

Zwracasz wartość która została już zwolniona.
Lepsza wersja:

void sciezka(int v, double nasycenie, int wersja, int licznik, string &fold)
{
//...
    fold = folder;
//...
}
0

Dzięki bardzo wszystkim za pomoc. Zastosowałem się do Waszych rad i jakoś ogarnąłem :) Dla ciekawych - źle odwoływałem się do wartości wektora w ostatnim 'ifie' funkcji 'f_cykl', co skutkowało odwoływaniem się do poprzednika początku cyklu, czyli niczego sensownego. Mam naukę, że jeśli moja praca nad pojęciem działania debuggera idzie w las to trzeba chwycić za pierwszy debugger każdego programisty - cout/printf ;D Dziękuję Wam bardzo :D

I przy okazji dziękuję za tą poradę z tym folderem, chociaż nie tego pytanie dotyczyło :)

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