首页 文章

指向struct的指针数组中的指针(如果设置为NULL)是否会分配内存?

提问于
浏览
1

我是C的新手,这是我的第一个问题:对于这个结构:

typedef struct Branch
{
    Tree * thisTree;
    struct Branch  * nodes[];
} Branch;

如果我执行以下操作似乎工作正常:

Branch branch1;
branch1->nodes[0] = NULL;

即使我不以这种方式为数组中的指针nr 0分配内存:

branch->node[0] = (Branch *) malloc(sizeof(Branch *));

如果我检查这个代码:

if ( branch1->nodes[0] == NULL)
    printf("is NULL");

它打印到输出:是NULL

所以我的问题是:是否为指针分配了内存?

branch1->nodes[0]

因为我有很多结构,如果我用固定数量的指针初始化每个分支,我会得到很多分配的数据(如果我用sizeof函数检查) . 这是这样的:设置为NULL(上图)错误的思维方式?

我的问题是指针的内存分配是4个字节 . 所以没有在数组中声明指定数量的指针,它何时为它分配内存?抱歉,我试图保持简单的问题,但我需要通过下一个分支中的结构指针到达一个字符串

这意味着我使用的结构是

typedef struct Branch
{
    Tree * thisTree;
    char *string;
    struct Branch  * nodes[];
} Branch;

所以,如果我不这样做

branch->node[0] = (Branch *) malloc(sizeof(Branch *));

然后

branch->node[0]->String = strdup("text");

我认为编译错误 .

2 回答

  • 0

    否 . 空指针不分配任何内存来将其存储在堆上,因为没有要分配的内容(因此“null”) .

    您的nodes数组确实会分配内存来存储空指针本身,但是存储整数,浮点数,结构的空指针数组所花费的内存量就是这么多 .

  • 0

    基本上你是在为指针分配内存,并将值 NULL 放在那里,在C中通常是0.但是值必须放在已分配的内存中,在这种情况下分配给指针,所以是的,仍然分配内存到指针,你只需将它的值设置为零 .

    但是如果你写了 branch->node = NULL; ,你就会使指针无效,失去对该内存的访问权限,但这不是删除它的正确方法,因为内存仍然是分配但只是无法访问,而是应该使用 free(branch->node); 取消分配记忆,如果你想这样做 .

    关于内存中已分配位置的数量,这将由您乘以 sizeof() 函数的时间来定义:

    int number = 2; //assume you want two elements
    branch->node[0] = (Branch *) malloc(number*sizeof(Branch *));
    

相关问题