如何查看struct指针中的struct指针是否已初始化

时间:2012-11-12 16:56:12

标签: c pointers struct

我有如下结构:

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 *)
      .....
}

这一切都很好,但我不知道如何控制天气以前的推动者被初始化。在第一个游戏中,在程序中移动lastmover变量(player *),但是前一个变量被分配给NULL(或者垃圾?)lmvp->previous=lmvp->lastmover;。但我想以某种方式检查先前的推动者是否被初始化。我试着这个:

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

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

2 个答案:

答案 0 :(得分:2)

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

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

应该是

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

这一切都很好

它不应该:)。

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

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

在C99中,第三种方法是使用指定的初始值设定项:

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

答案 1 :(得分:0)

使用它:

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