缺点功能不起作用

时间:2015-02-18 05:28:23

标签: c list struct infinite-loop 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 个答案:

答案 0 :(得分:0)

我想在此提及三件事。

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

点2。在while循环中,在将内存分配给ss->next之后,你将它放到ss然后检查not NULL,这通常不会是malloc()成功为真。

第3点。 temp = ss->s;不,这不是您执行深层复制的方式。您必须使用strcpy()。否则,没有必要为temp分配内存。