ваши ошибки:
int size = sizeof(myList->items);
, что не дает размер ранее выделенного динамического массива
использование count для знанияномер элемента уже присутствует
и
myList->items = realloc(myList->items, size + 1); //adds room for 1 more item in the list
недостаточно перераспределить, потому что размер не является номером элемента (не существует char ), должно быть:
myList->items = realloc(myList->items, (myList->count + 1) * sizeof(char *)); //adds room for 1 more item in the list
и переменная size не требуется, поэтому ( malloc должно быть длиной строки больше 1для нулевого символа):
myList->items[myList->count] = malloc(strlen(tempStr) + 1); //accesing the cell and assigning memory
strcpy(myList->items[myList->count], tempStr);
myList->count++;
Обратите внимание, что при инициализации с
myList->items = (char**)malloc(1);
вы можете сделать
myList->items = malloc(0);
и cast бесполезен
Бесполезно для addItem возвращать список, потому что это всегда аргумент myList
Код получает все замечания в аккаунте (я также удаляю бесполезные myList в начале)
list tempList; // Generic names to demonstrate the case
// Resetting the list to default values...
tempList.count = 0;
tempList.items = malloc(0);
//Setting the string array size to 0, later i increase it as i get input from the user
addItem(&tempList);
и
void addItem(list *myList)
{
/*
The function gets a list adds a string from the user and raises the count by 1
*/
char tempStr[STR_LEN]; //temp string so i can later assign it dynamically
// getting the string
printf("Enter String:\n");
fgets(tempStr, STR_LEN, stdin);
//
myList->items = realloc(myList->items, (myList->count + 1) * sizeof(char *)); //adds room for 1 more item in the list
myList->items[myList->count] = malloc(strlen(tempStr) + 1); //accesing the cell and assigning memory
strcpy(myList->items[myList->count], tempStr);
myList->count++;
}
Обратите внимание, что вы неt проверить возвращаемое значение fgets (для случая EOF) или удалить вероятный символ новой строки в конце