c - 初始化指针到指针而不丢失保留内存

标签 c pointers malloc

我正在使用二叉搜索树,并且我有一个关于在不丢失分配的内存的情况下初始化的问题。

/* newStructure.h */
typedef struct Item {
    int key;
    struct Item* LPtr;
    struct Item* RPtr;
} *tItem;  

主要代码:

#include <stdio.h>
#include "newStructure.h"

int main() {
    tItem* rootNode;
    if ( (rootNode = malloc(sizeof(struct Item))) == NULL ) 
        // Problem with malloc
        return 1;

    else {
        //Initialize node
        *rootNode = NULL; /* And here points my question */
    }
   // Code continues..
}

当我使用malloc()时,分配了struct Item大小的内存块,并将其地址存储在*rootNode中,我说得对吗?
但是当我将此节点初始化为 NULL (节点尚未包含任何数据)时,我说 *rootNode 包含 NULL 因此我丢失了分配的内存块的地址。
或者我在这里遗漏了一些东西?

最佳答案

But when i initialize this node to NULL [...]

这不是将节点初始化为NULL的正确方法

*rootNode = NULL;

您已将一个 sizeof(struct Item) block 分配给一个应该是指向指针的指针的字段,但随后您将其视为指针,这是不正确的。

您的代码不需要指向指针的指针,单间接指针就足够了:

tItem rootNode; // You typedef-ed tItem is a pointer
if ( (rootNode = malloc(sizeof(struct Item))) == NULL ) {
    // Problem with malloc
    return 1;
} else {
    //Initialize node
    rootNode->key = 0;
    rootNode->LPtr = NULL;
    rootNode->RPtr = NULL;
}

关于c - 初始化指针到指针而不丢失保留内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47456446/

相关文章:

计算字符串中特定单词的出现次数

c++ - inotify 和 epoll 的区别

c - 如何格式化在 C 中指定一个 const char *?

c - 释放内存(或分配)时出现问题

c - 当您传递已分配的值指针时,究竟会发生什么?

c - 内存问题和功能

将 **array + a 更改为 *array[a]

c - ANSI C - 右上三角矩阵的数值稳定回代算法

c - 指向存储的特定内存地址的指针

c - 初始化包含指向数组的指针的结构