Tuesday 15 February 2011

pointers - Segmentation fault core dumped in C while trying to create memory for a Struct -



pointers - Segmentation fault core dumped in C while trying to create memory for a Struct -

i'm getting segmentation fault when trying run next code:

c file

#include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include "mydata.h" struct structpointer *sp; struct structpointer *ssp; int recordnumber = 0; int numberofaccesses = 0; int main(void) { sp = (struct structpointer *) malloc(5 * sizeof(struct structpointer)); ssp = sp; memcpy(sp->name,"adam baum",50); memcpy(sp->firenumber,"n1234",10); memcpy(sp->street,"top secret",25); memcpy(sp->city,"manhattan",25); memcpy(sp->state,"new york",25); sp++; recordnumber++; memcpy(sp->name,"adam zapel",50); memcpy(sp->firenumber,"s4321",10); memcpy(sp->street,"throat",25); memcpy(sp->city,"manhattan",25); memcpy(sp->state,"new york",25); sp++; recordnumber++; memcpy(sp->name,"al bino",50); memcpy(sp->firenumber,"w1234",10); memcpy(sp->street,"white",25); memcpy(sp->city,"anchorage",25); memcpy(sp->state,"alaska",25); sp++; recordnumber++; memcpy(sp->name,"anne teak",50); memcpy(sp->firenumber,"e4321",10); memcpy(sp->street,"oak",25); memcpy(sp->city,"woodville",25); memcpy(sp->state,"wisconsin",25); sp++; recordnumber++; memcpy(sp->name,"barb dwyer",50); memcpy(sp->firenumber,"n1234",10); memcpy(sp->street,"keepout",25); memcpy(sp->city,"kilgore",25); memcpy(sp->state,"texas",25); recordnumber++; while (1){ int sel; printf("menu\n"); printf("=====\n"); printf("1. print records\n"); printf("2. print number of records\n"); printf("3. print size of database\n"); printf("4. add together record\n"); printf("5. delete record\n"); printf("6. print number of accesses database\n"); printf("7. exit\n"); printf("=====\n"); printf("enter selection: "); sel = getchar(); sel = sel-48; switch(sel){ case 1: numberofaccesses++; printallrecords(sp); break; case 2: numberofaccesses++; fprintf(stderr,"there total of %d records\n", recordnumber); break; case 3: numberofaccesses++; printsizeofdatabase(sp); break; case 4: numberofaccesses++; sp = ssp; addrecord(sp); break; case 5: numberofaccesses++; deleterecord(sp); break; case 6: numberofaccesses++; fprintf(stderr,"the total number of accesses %d\n", numberofaccesses); break; case 7: exit(0); case -38: printf("code reading in linefeed , displaying menu again\n"); break; default: printf("error: input not valid selection.\n"); break; } } homecoming 0; } int printallrecords(struct structpointer *addresses){ int i; printf("all records: "); for(i=1;i<recordnumber;i++){ printf("address: %d\n", i); fprintf(stderr, "name = \%s\n", addresses-> name); fprintf(stderr, "fire number = \%s\n", addresses-> firenumber); fprintf(stderr, "street = \%s\n", addresses-> street); fprintf(stderr, "city = \%s\n\n", addresses-> city); fprintf(stderr, "state = \%s\n\n", addresses-> state); } homecoming 1; } int printsizeofdatabase(struct structpointer *addressesagain) { int size = 0; int i; (i=1;i<=recordnumber;i++) { size += sizeof(addressesagain->name); size += sizeof(addressesagain->firenumber); size += sizeof(addressesagain->street); size += sizeof(addressesagain->city); size += sizeof(addressesagain->state); addressesagain++; } fprintf(stderr, "the size of database %d bytes.\n", size); homecoming size; } int addrecord(struct structpointer *addressesagaintimes2){ char entryname; char entryfirenumber; char entrystreet; char entrycity; char entrystate; recordnumber++; struct structpointer *thestruct; thestruct = (struct structpointer *) malloc ((recordnumber+1) * sizeof(struct structpointer)); addressesagaintimes2 = ssp; int i; (i=1;i<recordnumber;i++){ memcpy(thestruct->name,addressesagaintimes2->name,50); memcpy(thestruct->firenumber,addressesagaintimes2->firenumber,10); memcpy(thestruct->street,addressesagaintimes2->street,25); memcpy(thestruct->city,addressesagaintimes2->city,25); memcpy(thestruct->state,addressesagaintimes2->state,25); if(i==recordnumber-1){ thestruct++;} else{ thestruct++; addressesagaintimes2++;} } printf("enter name of new record: \n"); scanf("%s",&entryname); memcpy(thestruct->name,&entryname,50); printf("enter fire number of new record: \n"); scanf("%s",&entryfirenumber); memcpy(thestruct->firenumber,&entryfirenumber,10); printf("enter street of new record: \n"); scanf("%s",&entrystreet); memcpy(thestruct->street,&entrystreet,25); printf("enter city of new record: \n"); scanf("%s",&entrycity); memcpy(thestruct->city,&entrycity,25); printf("enter state of new record: \n"); scanf("%s",&entrystate); memcpy(thestruct->state,&entrystate,25); addressesagaintimes2=thestruct; printf("record has been added."); homecoming 0; } int deleterecord(struct structpointer *addressesagaintimes3){ struct structpointer *anotherstruct; anotherstruct = (struct structpointer *) malloc ((recordnumber+1) * sizeof(struct structpointer)); int i; for(i=0;i<5;i++){ memcpy(anotherstruct->name,addressesagaintimes3->name,50); memcpy(anotherstruct->firenumber,addressesagaintimes3->firenumber,10); memcpy(anotherstruct->street,addressesagaintimes3->street,25); memcpy(anotherstruct->city,addressesagaintimes3->city,25); memcpy(anotherstruct->state,addressesagaintimes3->state,25); addressesagaintimes3++; } addressesagaintimes3=anotherstruct; recordnumber--; printf("record has been deleted."); homecoming 0; }

header file:

#include <stdio.h> #include <stdlib.h> struct structpointer{ char *name; char *firenumber; char *street; char *city; char *state; };

this programme supposed create chunk of memory can store struct , display menu can add/remove entries struct.

your structpointer fellow member fields pointers strings, never allocated memory. utilize memcpy() in effect copying undefined memory.

changing construction follows resolve specific issue:

struct structpointer{ char name[some_appropriate_name_length]; char firenumber[some_appropriate_number_length]; char street[some_appropriate_street_length]; char city[some_appropriate_city_length]; char state[2]; };

c pointers struct segmentation-fault coredump

No comments:

Post a Comment