【发布时间】:2019-12-20 16:29:02
【问题描述】:
我正在尝试插入一个按节点-> 名称排序的链表的前面,并且我在文件系统中没有虚拟节点-> curr->subdir
typedef struct Unix{
struct Node *curr;
struct Node *root;
}Unix;
typedef struct Node{
struct Node *next;
struct Node *subdir;
struct Node *parent;
char *name;
char *field;
}Node;
下面是我插入到按名称排序的链表中
/* iter is a node used to traverse LL */
if(iter-> next == NULL && strcmp(iter->name, arg) > 0){
if(iter == filesystem-> curr-> subdir){
/* error occurs when placing node in the front of the list */
temp = malloc(sizeof(Node));
temp-> parent = filesystem-> curr-> subdir-> parent;
temp-> subdir = NULL;
temp-> name = malloc(strlen(filesystem->curr->subdir->name) + 1);
strcpy(temp-> name, filesystem-> curr-> subdir-> name);
temp-> next = NULL;
/* add is the node that's being inserted */
add-> next = temp;
filesystem-> curr->subdir = add;
尝试将 add 作为文件系统中的第一个节点 -> curr-> subdir 并将前一个 subdir 节点移动到 add-> next 时发生错误。
编辑:该程序是对 unix 机器的基本模拟。
【问题讨论】:
-
实际上 all 您的字符串缓冲区只有一个字节小。您的代码中有三个。 NUL 字符串终止符需要多一个字节。
-
你应该给我们看minimal reproducible example。尤其是调用
mkdir的代码也可能是错误的。
标签: c