Wednesday, 15 August 2012

c++ - Segmentation fault while pointer assignment -



c++ - Segmentation fault while pointer assignment -

write programme reverse direction of given singly-linked list. in other words, after reversal pointers should point backwards.

i trying solve above problem. wrote functions insertion,search , deletion , printing singly linked list.

my print function follows

void print(list **l) { list *p=*l; for(int i=0;p;i++) { cout<<p->item<<endl; p=p->next; } }

it works fine printing values in list.

but in main function if same assignment this

list *p=*l;

it gives me segmentation fault. main function follow

main() { list **l; *l=null; int n; while(cin>>n) insert(l,n); list *p=*l; list *prev=null; list *next; while(p) { next=p->next; p->next=prev; prev=p; if(next==null) *l=p; p=next; } print(l); }

my insert function follows

void insert(list **l,int x) { list *p; p=(list *)malloc(sizeof(list)); p->item=x; p->next=*l; *l=p; }

what difference between assignment in print function , main function? why don't error in print function , segmentation fault in main function?

if function this

main() { list **l; *l=null; int n; while(cin>>n) insert(l,n); print(l); }

i not getting error able insert , print values of list.

when write

list **l; *l=null;

you're dereferencing invalid pointer, run undefined behavior.

inside function, you're passing valid pointer argument. example

list* l; void print(&l)

in case, &l of type list** - , points dangling list*, dereferencing yield pointer (l itself). l isn't initialized, not reading ok.

c++ c

No comments:

Post a Comment