Axel Gocan Axel Gocan - 1 year ago 66
C Question

C function don't return list values

Don't know why but my function don't want return values.
This is how I use this function:

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

And this is function:

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;

In debuger I see that returned wskazanyelement have values copied from ramka. But when function end and I go to next step the pakiet is empty. Why? I return copied data on the end of function.

Answer Source

I fix this issue. This isn't problem with pointer. Like I say this i problem with gcc. I must downgrade this because upgrade start issue. I was a gcc6. I was remove it:

aptitude remove gcc-6

But this remove main gcc also, so I was must redefinie it

pdate-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 --slave /usr/bin/g++ g++ /usr/bin/g++-5

After clean project and rebuild it, my function start work currectly.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download