c-Cons功能不工作



我目前正在尝试编程一个函数,该函数将把一个新元素放到列表的顶部,并将列表的其余部分推回去。。。有人能帮我吗?当我试图编译和运行程序时,它不起作用。它会无限循环。有什么帮助吗?

#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;
}

我想在这里提到三件事。

第1点。您没有检查malloc()是否成功。您正在立即取消引用返回的指针。如果malloc()失败,您将面临UB。[ss->next->s]

第2点。在while循环中,将内存分配给ss->next后,将其放入ss,然后检查是否为NULL,对于malloc()的成功,这通常不会为TRUE。

第3点。temp = ss->s;不,这不是执行深度复制的方式。你必须使用strcpy()。否则,将内存分配给temp是没有意义的。

相关内容

  • 没有找到相关文章

最新更新