Note that there are some explanatory texts on larger screens.

plurals
  1. POInserting item in the end of list in C, produces a segmentation fault
    primarykey
    data
    text
    <p>I am trying to insert items at the end of a list, however, when i compile it, it does allocate memory for the Record ptr, but it does not insert the items in the end of the list. Segmentation fault.Can anyone help with it? Cheers. </p> <pre><code>#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; /* these arrays are just used to give the parameters to 'insert', to create the 'people' array */ char names[][10]= {"Simon", "Suzie", "Alfred", "Chip", "John", "Tim", "Harriet"}; int ages[7]= {22, 24, 106, 6, 18, 32, 24}; /* declare your struct for a person here */ typedef struct Record{ char *name; int age; struct Record *next; } Record; //set the head pointer at the start of the list Record *headptr = NULL; static void insert (Record *p, char *s, int n) { /* create a new space for the new person */ Record *ptr =(Record*) malloc(sizeof(Record)); /* check if it is succeeded */ if(ptr == NULL){ abort(); printf("memory allocation fail"); exit(1); }else{ printf("memory allocation to person - %s - \n", s); } //set the data for the new person ptr-&gt;name=s; ptr-&gt;age=n; //ptr= NULL; if(headptr==NULL){ headptr = ptr-&gt;next; ptr=headptr; }else{ while( ptr-&gt;next == NULL) { ptr=ptr-&gt;next; headptr=ptr; } } } int main(int argc, char **argv) { /* declare the people array here */ Record *p=headptr; headptr = NULL; //insert the members and age into the unusage array. for (int i=0; i &lt; 7; i++) { insert (p,names[i], ages[i]); /* do not dereference the pointer */ } /* print out a line before printing the names and ages */ printf("\n"); //set the pointer at the start of the list p = headptr; /* print the people array here*/ for (int i = 0; i &lt; 7; i++, p = p-&gt;next) { printf("The name is: %s, the age is:%i\n", p-&gt;name, p-&gt;age); } /* This is the third loop for call free to release the memory allocated by malloc */ /* the free()function deallocate the space pointed by ptr. */ for(int i=0; i&lt;7;i++){ free(p); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload