动态分配指向未从C函数

时间:2017-11-17 02:42:10

标签: c pointers malloc

我正在尝试使用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的值。

1 个答案:

答案 0 :(得分:0)

你打印的是什么吗?

没有

你正在打印错误的东西。

 printf("%p\n",newNode);

现在您将看到返回的值,并且您打印的值将匹配。以前你回来的东西和打印另一个。

解释

之前您正在动态分配内存,malloc的返回值存储在本地变量newNode中。现在您正在打印newNode的地址。不是newNode包含从函数返回的内容。

同时检查malloc的返回值。取消分配动态分配的内存。