我正在尝试将值(文件路径的字符数组)添加到链接列表中。我不断从_add函数获取Seg错误,并且我不确定如何解决它。我尝试了许多不同的编写函数的方法,但是却一无所获。答案似乎很简单,我只是无法理解。这是我的_add函数代码:
typedef struct cplist {
char *path;
int cpid;
time_t tv_sec;
suseconds_t tv_usec;
struct cplist *next;
} cplist;
cplist *cpl_add(cplist *head, char *path){
cplist *current = head;
while(current->next != NULL){
current = current->next;
}
current->next = (cplist*) malloc(sizeof(cplist));
current->next->path = path;
current->next->next = NULL;
}
这是我的主程序代码。我正在读取一个可选的'-v'标志,然后是一个整数,然后是必须添加到链表中的路径:
int main(int argc, char* argv[]){
int i, j;
char *p;
char *key;
cplist *head = NULL;
for(i = 0; i < argc; i++){
if(strcmp(argv[1], "-v") == 0){
key = argv[2];
for(j = 3; j < argc; j++){
p = argv[j];
cpl_add(head, p);
}
} else {
key = argv[1];
for(j = 2; j < argc; j++){
p = argv[j];
cpl_add(head, p);
}
}
}
[当您呼叫cpl_add(head, p)
时,您实际上是在呼叫cpl_head(NULL, p)
。
然后您叫NULL->next
炸毁。
head
初始化malloc
。>NULL
。您可以做的其他事情:
p
变量,只需直接用cpl_add(head, argv[j])
调用以避免歧义。该函数通常是不正确的,因为最初传递给head的指针等于NULL时,它不处理列表。