我是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");
我认为编译错误。
答案 0 :(得分:0)
没有。空指针不会分配任何内存来存储它,因为没有任何内容可以分配(因此" null")。
您的nodes数组确实会分配内存来存储空指针本身,但是存储整数,浮点数,结构的空指针数组所花费的内存一样多。
答案 1 :(得分: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 *));