Динамический список в виде структуры в языке C

Рейтинг: 0Ответов: 0Опубликовано: 31.05.2023

Вникаю в язык, никакого опыта не имею. По шаблону дерева из книги Кёрнигана/Ричи пробовал организовать список, но программа либо закрывается с уведомлением винды о сбое, либо просто зависает, не прерываясь сочетанием клавиш "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;
}

Ответы

Ответов пока нет.