我正在使用二叉搜索树,并且我有一个关于在不丢失分配的内存的情况下初始化的问题。
/* 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/