Я подозреваю, что вы просите нас помочь вам с домашним заданием, поэтому я не собираюсь решать все ваши проблемы с кодом для вас. Я лишь укажу на вашу самую вопиющую ошибку. Это ошибка, о которой вы спрашивали - почему происходит сбой второго вызова вашей create_Set()
функции?
test.c, строки 27-28:
Set* s2;
Set_Create(s2); //.. Here error comes..
В set.c я урезал его до значимого кода:
void Set_Create(Set* set){
if(set == NULL){
set = (Set *)malloc(sizeof(Set));
}
set->size = 0;
set->data = -1;
set->next = NULL;
}
Происходит то, что оба ваших вызовов на Set_Create
перезаписывают некоторые произвольные, непредсказуемые области памяти. Это серьезная ошибка.
В случае set1
произвольный указатель, с которым вы столкнулись, похоже, указывает на какое-то место в памяти, в которое можно записать. Кто знает, какие данные вы используете, но ваши данные могут выжить в этом месте в течение короткого периода времени.
В случае set2
произвольный указатель, с которым вы сталкиваетесь, является , а не допустимой ячейкой памяти, которую вы хотите изменить, поэтому ваша программа падает.
Измените create_Set
следующим образом:
Set* Set_Create() {
Set * set = calloc(1, sizeof(Set));
set->data = -1;
return set;
}
И в test.c:
Set * set1 = Set_Create();