将内存分配给结构

时间:2017-03-30 17:57:25

标签: c memory-management double-pointer

我正在尝试为代码分配内存,其中我只包含了实际程序的摘录,如下所示,我遇到的问题是我不知道如何为该类型分配内存当我尝试将值分配给Key中的变量时,BStree_node中的键会导致分段错误的问题。

typedef int Data_Item;
typedef char* Sub_Key;
typedef struct {Sub_Key key1; Sub_Key key2;} Key;



struct BStree_node{
    Key key;
    Data_Item data;
    struct BStree_node *left, *right;
}
typedef struct BStree_node BStree_node;
typedef BStree_node** BStree;

BStree bs_tree_ini(void){
    BStree tempTreePointer;
    tempTreePointer = malloc(sizeof(BStree_node*));

    BStree_node *tempNode;
    tempNode = malloc(sizeof(BStree_node));
    tempNode = NULL;

    tempTreePointer = &tempNode;

    return tempTreePointer;

}

1 个答案:

答案 0 :(得分:0)

您可以像这样初始化您的节点,使用calloc将内存归零以正确初始化所有字段:

BStree_node *init_node()
{
   BStree_node *rval = calloc(1,sizeof(BStree_node)); // so all data & pointers are zeroed
   return rval;
}

像这样使用它:init main,只剩下了。 right保持为零:该主节点没有正确的节点。

int main()
{
    BStree_node *head = init_node();
    head->left = init_node();
    ...

    return 0;
}