gpt4 book ai didi

c - 如何查看struct pointer中的struct pointer是否初始化

转载 作者:太空宇宙 更新时间:2023-11-04 02:59:50 33 4
gpt4 key购买 nike

我有一个类似下面的结构:

typedef struct {
player *lastmover;
player *previous;
} lastmove;


typedef struct {
int moves;
char *name;
} player;

我尝试像这样分配内存,这样:

lastmove lmv;
lmv.lastmover=malloc(sizeof(player *));
lmv.previous=malloc(sizeof(player *));
.....
callfunction(&lmv);
.....

然后在另一个地方我使用指针 lmvp (lastmover *) 并像这样进行赋值:

void
callfuntion(lastmove *)
{
.....
lmvp->previous=lmvp->lastmover;
lmvp->lastmover=p; //where p is of type (player *)
.....
}

这一切工作正常,但我不知道如何控制天气前一个插入者被初始化。在程序的第一个游戏 Action 中,lastmover 变量 (player *) 被初始化,但 previous 变量被分配为 NULL(或垃圾?)lmvp->previous=lmvp->lastmover;。但我想以某种方式检查前一个移动器是否已初始化。我正在尝试这个:

void
callfunction(lastmove *)
{
......
......
if(lmvp->previous!=NULL)
......
}

但我很确定它不会做.. 控制它的最佳方法是什么?

最佳答案

你只是在分配指针的大小,这个

lmv.lastmover=malloc(sizeof(player *));

应该是

lmv.lastmover=malloc(sizeof(player));

this all works fine

不应该:)

编辑:如果你只分配一个指向lastmover的指针那么你根本不需要分配内存,否则就是内存泄漏,现在如果你想检查它是否被初始化然后将它初始化为NULL

lastmove lmv = {0};
//or
lmv.lastmover= NULL;
lmv.previous= NULL;
...
//later
if(lmv->previous!=NULL)

在 C99 中,第三种方法是使用指定的初始化器:

lastmove lmv = {
.lastmover= NULL;
.previous= NULL;
};

关于c - 如何查看struct pointer中的struct pointer是否初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13347929/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com