我目前正在尝试编写一个功能,将一个新元素放在列表顶部,然后推回列表的其余部分......任何人都可以帮我这个吗?当我尝试编译并运行它时,我的程序不起作用。它继续无限循环。 有什么帮助吗?
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
/* linked lists of strings */
typedef struct sll sll;
struct sll {
char *s;
sll *next;
};
/* By convention, the empty list is NULL. */
/* sll_cons : (char*, sll*) -> sll* */
/* build new list with given string at the head */
/* note: copy the given string to the list (deep copy) */
sll *sll_cons(char *s, sll *ss) {
while (ss != NULL) {
char* temp;
temp = malloc(sizeof(char)*strlen(ss->s));
temp = ss->s;
ss->s = s;
ss->next = malloc(sizeof(char)*strlen(ss->s));
ss->next->s = temp;
ss->next->next = NULL;
ss = ss->next;
}
return ss;
}
答案 0 :(得分:0)
我想在此提及三件事。
第1点。您没有检查malloc()
是否成功。您将立即取消引用返回的指针。如果malloc()
失败,您将面临UB。 [ss->next->s
]
点2。在while循环中,在将内存分配给ss->next
之后,你将它放到ss
然后检查not NULL,这通常不会是malloc()
成功为真。
第3点。 temp = ss->s;
不,这不是您执行深层复制的方式。您必须使用strcpy()
。否则,没有必要为temp
分配内存。