编辑:变量名
我正在制作一个链表,但当我尝试释放节点时,它会给出一个错误。我追踪了我的代码并发现,当我使用以下代码创建节点时,出现了错误。
奇怪的是,如果我分配的字符比我想要的少一个字符,它就可以工作。而且,对于“word”的分配,它也可以正常工作,问题在于“id”。
struct node* makeNewNode (char* word, char* id, int occurrences) {
//make space for the new node
struct node* temp = malloc (sizeof(struct node*));
temp->word = malloc(sizeof(char) * strlen(word) + 1);
strncpy(temp->word, word, strlen(word));
temp->word[strlen(word)] = '\0';
temp->id = malloc(sizeof(char) * strlen(id) + 1);
strncpy(temp->id, id, strlen(id));
temp->id[strlen(id)] = '\0';
//assign the number of occurrences to the argument passed in
temp->occurrences = occurrences;
//return the newly created node
return temp;
}
节点的结构体如下:
struct node {
char* word;
char* id;
int occurrences;
struct node* next;
};
What I mean by one less is that this works:
strncpy(temp->id, id, strlen(id)-1);
然而,这意味着我在不断地丢失一个字符。 我曾尝试使用for循环手动复制字符串,但它也不起作用。我尝试了追加一个'\0'字符,但它也没有起作用。 如果需要,我可以提供我用来测试的内容。
width
分配内存空间,但当你在末尾添加一个星号时,它只会分配一个指针width
(即,删除此行末尾的星号“struct llnode* newNode = malloc(sizeof(struct llnode))
”);(2)你的代码没有赋值newNode->next
。(编辑3)在这个函数中,没有与先前节点建立连接。我希望你在调用者函数中注意到这一点。 - ssdsizeof(char)
总是等于1。 - Tordekstrncpy()
不是一个字符串函数。它是用于包含序列而没有嵌入空字符的空值填充缓冲区的。你很少会有理由去使用它,如果有的话也极为罕见。 - Deduplicator