Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: bz1pp3d в Jun 17, 2012, 15:25



Титла: Средна стойност на двойно свързан списък - Seg Fault
Публикувано от: bz1pp3d в Jun 17, 2012, 15:25
Здравейте! Имам проблем със намиране на средна стойност в двойно свързан списък. Ето го и него (има и няколко други функции, но интерес представлява единствено обработката на средната стойност.)
http://pastebin.com/hX9VtTtY

Въпросът е: защо се чупи функцията? Всякакви мнения и критики са + ! Благодаря!


Титла: Re: Средна стойност на двойно свързан списък - Seg Fault
Публикувано от: gat3way в Jun 17, 2012, 15:37
Първо добре че поназнайвам малко немски, доста е гадно когато имена на функции и променливи не ти говорят нищо :)

Иначе проблемът лесно може да се види:

Цитат
        ptr=root;
        while(ptr!=NULL){
                ptr=ptr->next;
                summe=summe+ptr->Messwert;
                temp++;
        }

Сега помисли си какво става когато ptr сочи към последния елемент в списъка. присвояваш на указателя ptr->next и после се опитваш да го dereference-неш. Следва едно хубаво бум. В този ред на мисли или прави ptr=ptr->next в края на while body-то, или си сложи една проверка дали е NULL.


Титла: Re: Средна стойност на двойно свързан списък - Seg Fault
Публикувано от: bz1pp3d в Jun 17, 2012, 15:47
Изглежда цялата материя на абстрактните структури е интересна... Благодаря gat3way!


Титла: Re: Средна стойност на двойно свързан списък - Seg Fault
Публикувано от: bvbfan в Jun 17, 2012, 16:31
По-добре ползвай
Код
GeSHi (C):
  1. for(ptr=root; ptr; ptr=ptr->next)
, освен това може да ползваш макрос с цел да не объркаш
Код
GeSHi (C):
  1. #define for_ech_elem(p,s) for(p=s; p; p=p->next)
. След това tail няма нужда да заделя памет в началото, както за всяка заделена памет, когато преставаш да я ползваш, трябва да я освободиш с free, ако смяташ да се занимаваш с програмиране, в частност С/С++, трябва да използваш и програми за следене на грешки при изпълнението на кода, например valgrind.