我正在尝试使用C中的链表编写一个一致性程序。为此,我从函数返回一个指向动态分配结构的指针。但是,函数中指针的地址与返回值的地址不匹配。相关代码如下。
int main(int argc, char *argv[]){
...
struct wordlist *a = NULL;
...
a = firstNode(word);
printf("%p\n",(void*)&a);
...
}
struct wordlist * firstNode(char *fileWord){
struct wordlist *newNode = malloc(sizeof *newNode);
newNode->word = fileWord;
newNode->next = NULL;
newNode->previous = NULL;
printf("%s\n",newNode->word);
printf("%p\n",(void*)&newNode);
return newNode;
}
当我打印newNode的地址时,它总是不同于我在main中打印a的值。
答案 0 :(得分:0)
你打印的是什么吗?
没有
你正在打印错误的东西。
printf("%p\n",newNode);
现在您将看到返回的值,并且您打印的值将匹配。以前你回来的东西和打印另一个。
之前您正在动态分配内存,malloc
的返回值存储在本地变量newNode
中。现在您正在打印newNode
的地址。不是newNode
包含从函数返回的内容。
同时检查malloc
的返回值。取消分配动态分配的内存。