[ negative7 @ 21.06.2009. 13:33 ] @
funkcija za skidanje stringa sa pocetka liste,nakon sto je pozovem pobrise mi se citava lista.vrati on dobar string,ali
ne znam zasto mi se pobrise citava lista. nije kvar u ''&head'',jer sa samo ''head'' neradi nista.

Code:


// ovo mi stoji gore
struct node 
{
   char *data;
   struct node *next;
};
typedet struct node node;
typedet struct node* pnode;

char *skini_sapoc(pnode &head)
{
       if(!prazna(head))//ova funkcija dobro radi,nisam je piso.
         {
            char*y=(char*)malloc(strlen(head->data)*sizeof(char));
            strcpy(y,head->data)
            pnode x=head;
            head=head->next;
            free(x);
            return y;
         }
       else
          {
             return NULL;  
          }
}


a bez stringa kad je rijec o broja ovo sve odlicno radi,zasto sta sam pogrijesio
[ Mihajlo Cvetanović @ 21.06.2009. 17:11 ] @
U mallocu nisi uračunao jedan bajt za terminator stringa, možda to pokvari nešto, mada ne verujem. Mislim da ti se ne pobriše čitava lista, nego samo izgubiš pokazivač na nju. Na prvi pogled ovo bi trebalo da radi. Moraćeš da debaguješ ovo korak po korak i da u svakom koraku proveriš da li je sve onako kao što bi u tom koraku trebalo da bude. Možda greška nije u ovom delu koda nego u nekom drugom.
[ Goran Rakić @ 21.06.2009. 17:43 ] @
Koristiš C++ kompilator? U tom slučaju je "pnode &head" referenca na pokazivač na head, ako si u C-u trebalo bi da koristiš "pnode *head" gde treba u kodu (pokazivač na pokazivač na head) i onda (*head tj. (*head)->data ili napraviš pnode iter = *head pa koristiš iter).

Kako si alocirao head van ove funkcije? Ako si memoriju alocirao kao blok, free(x) će osloboditi ceo blok.

I kao što je Mihajlo već rekao, fali ti prostor za još jedan char u malloc() pozivu.

Moj prigovor bi išao na estetiku, uobičajeno je da ovakve funkcije vraćaju pokazivač na novi početak liste, a da se znakovna niska smešta u pokazivač. Prototip bi onda bio: pnode skini_sapoc(pnode head, char* return);.
[ negative7 @ 21.06.2009. 18:42 ] @
hvala obojici,izgleda sve je bilo uredu isao sam debug korak po korak,greska je bila sto sam u mainu u switch naredbi
imao ispod poziva ove funkcije funkciju oslobodi (koja je brisala citavu listu )a zaboravio sam break poslije ove funkcije ''skini sa pocetka''.

Nista hvala jos jednom
[ radoica @ 22.06.2009. 14:01 ] @
Kada se oslobadja ovo "x", da li treba pre
Code:
free(x);

dodati
Code:
free(x->data);

?
[ Eurora3D Team @ 25.06.2009. 22:42 ] @
Treba