Я пытаюсь реализовать простой LinkedList в C, используя две структуры. Затем моя цель - распечатать данные, которые хранятся в заголовке связного списка.
Мой код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "LineParser.h"
#include <limits.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#define SYS_OPEN 5
#define SYS_CLOSE 6
#define SYS_READ 3
#define SYS_WRITE 4
#define SYS_lseek 19
#define STDOUT 1
#define STDIN 0
#define STDERR 2
char buf[2048];
typedef struct pair {
char *name;
char *value;
} pair;
typedef struct pList {
pair *curPair;
struct pList *next;
} pList;
pList *head;
void addLink(pList *link);
void addLink(pList *link) {
if (head == NULL) { //head empty
head = link;
} else {
pList *curLink = head;
while (curLink->next != NULL) {
curLink = curLink->next;
}
curLink->next = link;
}
}
void print() {
printf("%s", head->curPair->name);
}
void dummyFunc() {
pair *p = (pair *)malloc(sizeof(pair));
p->name = "User1";
p->value = "123";
pList *link = (pList *)malloc(sizeof(pList));
link->curPair = p;
link->next = NULL;
addLink(link);
head = (pList *)malloc(sizeof(pList));
head->curPair = p;
head->next = NULL;
print();
}
int main(int argc, char *argv[]) {
char argVals[3];
argVals[2] = '\0';
//init the list
head = NULL;
while (1 == 1) {
fgets(buf, 2048, stdin);
if (strcmp(buf, "dummy") == 0) {
dummyFunc();
}
}
}
Затем, когда выполняется функция print
(вызывается из dummyFunc
), программа получает ошибку сегмента, подразумевая, что изменения, произошедшие в dummyFunc
, фактически не влияли на head
.