我试图使用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的值时不同。
最佳答案
您要打印返回的内容吗?
没有。
您正在打印错误的东西。
printf("%p\n",newNode);
现在,您将看到返回的值和您打印的值将匹配。以前,您是在回购东西并打印另一幅。
说明
之前,您是动态分配内存,而
malloc
的返回值存储在局部变量newNode
中。现在,您正在打印newNode
的地址。不是newNode
包含从函数返回的内容。还要检查
malloc
的返回值。取消分配动态分配的内存。关于c - 动态分配的指向不从C函数返回的结构的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47342465/