我正在尝试插入按节点>名称排序的链表的前面,并且我在文件系统中没有虚拟节点> 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 中的第一个节点并将上一个子目录节点移动到下一个 add-> 节点时,会发生错误。
编辑:该程序是Unix机器的基本模拟。
这就是我开始怀疑错误的地方(就在代码的开头(:
add-> parent = malloc(sizeof(Node));
add-> parent = filesystem-> curr;
你分配了两次add-> parent
,这意味着它显然会完成后一项任务,而前一个任务"浪费"。
除了程序中的内存泄漏(因为您将无法释放此分配的内存块(之外,很有可能add-> parent
设置该值不是您想到的。