Funkcja nie zwraca wartości listy wiązanej

0

Witajcie,

Mam pewna funkcję tóra wywołuję tak:

struct element_listy *pakiet = NULL, *wsk = NULL;
pakiet = dodaj_ramke(pakiet, &frame);

Wygląda ona tak:

 struct element_listy* dodaj_ramke (struct element_listy *wskazanyelement, struct ramka *ramka){
    struct element_listy *wsk, *nowy;
    if (wskazanyelement == NULL) {
        wskazanyelement = (struct element_listy*)malloc(sizeof(struct element_listy)); //rezerwacja pamięci dla listy
        wskazanyelement->ramka=(struct ramka*)malloc(sizeof(struct ramka)); //zalookowanie pamieci dla elementu listy
        wskazanyelement->first = wskazanyelement; //Pierwszy element to lista obecna
        wskazanyelement->next = NULL; // Drugi element nie istnieje
        wskazanyelement->previous = wskazanyelement; //wskazanyelement->first->ramka; // poprzedni element to wskazanie na liste obecną
        memcpy(wskazanyelement->first->ramka, ramka, sizeof(struct ramka)); //skopiowanie pod pierwszy element listy
        return wskazanyelement; //zwróć liste
    } else {
        wsk = wskazanyelement; //pomocnicza lista dla listy
        while (wsk->next != NULL) { //przechodzimy na koniec listy
            wsk = wsk->next;
        }
        nowy = (struct element_listy*)malloc(sizeof(struct element_listy)); //lookowanie pamieci dla listy
        nowy->ramka=(struct ramka*)malloc(sizeof(struct ramka)); //zalookowanie wskazanie na elementy listy
        memcpy(nowy->ramka, ramka, sizeof(struct ramka)); //kopiowanie pod element listy
        nowy->first = wskazanyelement; //pierwszy element pomocniczej to pobrana ramka
        wsk->next = nowy; //następny element
        wsk->previous = wsk;
        return wskazanyelement;
    }
}

I nie wiem czemu ale nie zwraca ona mi do pakiet wartości która jest por frame. W debugerze jak jestem już na return wskazanyelement wartości są ładnie przekopiowane, ale po wyjściu z funkcji jest pusto. Kończą mi się pomysł, a czas mnie nagli.

Aby było ciekawie na wirtualce z ubuntu i eclipce mars działa. A na obecnym pochodnym debiana w eclipse neon już nie, a jeszcze dwa tygodnie temu działało.

1

Dlaczego nikt nie odpowiada w moim wątku?

to co tutaj masz jest nieczytelne

1
Krump napisał(a):

na obecnym pochodnym debiana w eclipse neon już nie, a jeszcze dwa tygodnie temu działało.

  1. Piewszy argument, żeby zacząć używać jakiegoś systemu kontroli wersji (warto też zrestartować komputer - serio).
  2. Nadmierne komentarze zaśmiecają kod (zwłaszcza tak niechlujnie napisane. Btw. od alloc się "alokuje pamięć", a nie "lookuje")
  3. Wydziel sobie tworzenie pustego elementu do nowej funkcji.
  4. Bez pełnego kodu - debugger w dłoń i jeszcze raz. My tego bez kodu nie zdebugujemy (a podejrzewam, że z kodem też mało komu się będzie chciało).
0

Cześć,
Dzięki za odpowiedź.

  1. Restartów próbowałem, system kontroli wersji?
  2. Komentarze były dla mnie, że jak wrócę do tego za jakiś czas to ogarnąć listy, bo nie ukrywam, że mam/miałem z nimi problem.
  3. Jak to wydzielić do nowej funkcji tworzenie pustego elementu? Jaki ma to sens? Pierwszy element listy ma być pusty?
  4. Dałem załącznik.

Głownie dziwi mnie to, iż to działało. gcc nie miał żadnej aktualizacji, a tym bardziej eclipse. A na wirtualce działa,

0

Problem rozwiązałem był problem z GCC. Zaktualizował się do wersji 6. Musiałem go z downgradeować.
aptitude remove gcc-6
Lecz usuwało to także pakiet główny gcc więc musiałem zrobić redefinicje.
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 --slave /usr/bin/g++ g++ /usr/bin/g++-5
Po po posprzątaniu projektu i rebuildzie, działa poprawnie jak za młodu.

0

A odpal ty to z jakimś valgrindem może? Bo aktualizacja gcc niczego nie zepsuje o ile kod jest poprawny. Twój pewnie nie jest i stąd takie kwiatki.

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