指向指针的初始化指针,不会丢失保留的记忆

时间:2017-11-23 13:15:42

标签: 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因此我丢失了已分配内存块的地址。 /> 或者我错过了什么?

1 个答案:

答案 0 :(得分:1)

  

但是当我将此节点初始化为NULL [...]

这不是将节点初始化为NULL

的正确方法
*rootNode = NULL;

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

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

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;
}