Привет,
Я новичок в C и пытался реализовать свою собственную реализацию связанного списка, которая в основном выглядит следующим образом:
struct Element
{
void *value;
struct Element *next;
};
typedef struct
{
struct Element *first;
struct Element *last;
unsigned int size;
} LinkedList;
void LinkedList_init(LinkedList *this)
{
this->size = 0;
this->first = NULL;
this->last = NULL;
}
void LinkedList_add(LinkedList *this, void *value)
{
struct Element *node = malloc(sizeof(struct Element));
node->value = value;
node->next = NULL;
if (this->size == 0)
this->first = this->last = node;
else
{
this->last->next = node;
this->last = node;
}
this->size++;
}
Короче говоря, я хочу связанный список, которыйможет содержать произвольные типы - я слышал, это возможно в C с помощью пустых указателей.Теперь возникает проблема, когда я хочу использовать эту реализацию, например, со структурой в качестве значения:
typedef struct
{
int baz;
} Foo;
int main(void)
{
LinkedList list;
Foo bar;
bar.baz = 10;
LinkedList_init(&list);
LinkedList_add(&list, (void *) &bar);
/* try to get the element, that was just added ... */
Foo *firstElement = (Foo *)list.first;
/* ... and print its baz value */
printf("%d\n", firstElement->baz);
return 0;
}
Последний вызов printf просто печатает значения, подобные -1077927056, которые выглядят как адрес памяти.Так что это, вероятно, проблема с указателями.После поиска в сети последних нескольких дней аналогичной проблемы в Интернете (мне не повезло с этим), я попытался отбросить свою собственную логику и протестировать различные случайные * и комбинации.Оказывается, это тоже тупик.: (
Возможно, для более опытного программиста на Си это что-то простое, но я просто не могу найти ответ. Пожалуйста, помогите: D