Динамический список в виде структуры в языке C
Вникаю в язык, никакого опыта не имею. По шаблону дерева из книги Кёрнигана/Ричи пробовал организовать список, но программа либо закрывается с уведомлением винды о сбое, либо просто зависает, не прерываясь сочетанием клавиш "ctrl+c". При компиляции ошибок не выдаёт (MinGW). Если ввести маркировку printf перед malloc в addpage(), то программа даже выводит результат, но завершается так же неисправно (что сбивает меня с толку). Как мог, почистил всё ненужное, но, кажется, всё равно громоздко:
#include <stdio.h>
#include <stdlib.h>
typedef struct list* plist;
typedef struct list {
char* name;
plist next;
} list;
void strcp(char* where, char* from) { //аналог strcpy из string.h (проблемы с кириллицей пручили)
while ((*where++ = *from++) != '\0');
}
plist addpage(plist this, char* str) {
if (this == NULL) {
this = (plist) malloc(sizeof(list));
strcp(this->name, str);
this->next = NULL;
}
else
this->next = addpage(this->next, str);
return this;
}
void printlist(plist this) {
if (this != NULL) {
printf("\nname: %s; ", this->name);
printlist(this->next); //вывод рекурсии проблему не решает
}
}
int main() {
char* name = "Oleg";
plist names;
names = NULL;
names = addpage(names, name);
printlist(names);
return 0;
}
Источник: Stack Overflow на русском