I get a segfault not sure from what could someone help me debug it please?
Code:
int loadData(GJCType* menu, char* menuFile, char* submenuFile)
{
/*pointer for malloc*/
GJCType *newP;
/*declaration of variables*/
int CountNoLines = 0;
char temp[LINE_LENGTH];
/* variables for tokenizer for menu file*/
char *catID;
char *catType;
char *catName;
char *catDescription;
/* declare file pointers to files*/
FILE *f1;
FILE *f2;
/* opening the menu and submenu for reading*/
f1 = fopen(menuFile, "r");
f2 = fopen(submenuFile, "r");
/* check to see if the file exists*/
if(f1 ==NU
LL || f2 == NULL)
{
/* check whether both files have existed or typed in correctly*/
if(f1 == NULL && f2 == NULL)
{
printf("Both files do not exist %s %s\n",menuFile,submenuFile);
}
/* check for each file existance*/
else if (f1 == NULL)
{
printf("%s does not exist\n\n",menuFile);
}
/* check for each file existance*/
else if(f2 == NULL)
{
printf("%s does not exist\n\n", submenuFile);
}
printf("EXITING PROGRAM ERROR!\n\n");
return ERRORCODE; /* cannot proceed*/
}
/* counts how many fields there are in the file*/
while(fgets(temp, LINE_LENGTH, f1)!=NULL)
{
/*temp[strlen(temp)]= '\0';
printf("%s", temp);*/
if(!countToken(f1, temp, TOKEN_PRODUCT))
{
return ERRORCODE;
}
CountNoLines++;
}
printf("%d", CountNoLines);
/* set f1 pointer to the start of the file for reading*/
fseek(f1, 0, SEEK_SET);
/* if CountNoLines is 0 do nothing*/
if(CountNoLines == 0)
{
;
}
/* if there is more than 0 lines tokenize fields
check if there is duplication and check the string
length and if its too big its the wrong data format
*/
if(CountNoLines > 0)
{
while(fgets(temp, LINE_LENGTH, f1) !=NULL)
{
/* stores the catID but also checks if there
is a duplicate*/
catID = strtok(temp, "|");
/*checks for a duplication of the id field*/
if(!checkDuplicationID(menu, catID))
{
return ERRORCODE;
}
/* gets the second field and tokenizez it*/
catType = strtok(NULL, "|");
catName = strtok(NULL, "|");
catDescription = strtok(NULL, "\0");
/* checks the string length of the field*/
if((strlen(catID) >ID_LEN) ||
(strlen(catType) >MAX_NAME_LEN) ||
(strlen(catDescription) >MAX_DESC_LEN))
{
printf("Wrong data format\n\n");
return ERRORCODE;
}
/* malloc the pointers*/
newP = malloc(sizeof (GJCType));
newP->headCategory = malloc(sizeof(CategoryType));
newP->headCategory->headItem = malloc(sizeof(ItemType));
newP->headCategory->nextCategory = malloc(sizeof(CategoryType));
newP->headCategory->headItem->nextItem =malloc(sizeof(ItemType));
/* check if it cannot allocate memory*/
if(newP == NULL)
{
printf("Memory could not be allocated\n\n");
return ERRORCODE;
}
/*copy variables into structure*/
strcpy(newP->headCategory->categoryID, catID);
newP->headCategory->drinkType = *catType;
/*printf("%c", newP->headCategory->drinkType);*/
/* strcpy(newP->headCategory->drinkType, catType);*/
strcpy(newP->headCategory->categoryName, catName);
strcpy(newP->headCategory->categoryDescription, catDescription);
newP->headCategory->nextCategory = NULL;
}
}
/* close both files after reading*/
if(fclose(f1)!=0 || fclose(f2)!=0)
{
fprintf(stderr, "Error in closing files\n");
}
return EXIT_SUCCESS;
}