c - 如何使用malloc解决多次初始化的问题



我需要使用 malloc 为结构游戏的一个实例分配内存,并将返回指针存储在游戏的p_game_info中。

这是game.c中相关函数的代码

void play_game()
{
    struct game *p_game_info = 0;
    struct game *p_game_info = malloc (sizeof (struct game));
}

这是 game.h 中结构体的代码

struct game
{
    char board[3][3];
    char playerNames[2][MAX_NAME_LEN];
    int status;
    boolean finished;
};

在VS中,我收到以下错误消息

error C2374: 'p_game_info': redefinition; multiple initialization

我一直在网上搜索类似的问题,但没有成功。

感谢您的帮助。

解决方案存在于错误消息本身中,不要每次都声明和初始化,只声明p_game_info一次。

void play_game() {
    struct game *p_game_info = malloc (sizeof (struct game));/* declaration & initialization both at a time */
}

正如错误所说,您在函数中初始化指针两次。另外,您也声明了两次..

尝试只做一次,比如。

void play_game()
{
    struct game *p_game_info = 0;                 // declaring and initializing once
    p_game_info = malloc (sizeof (struct game));  // allotting memory.
}

或者,您可以将两者组合在一行中。

void play_game()
{
    struct game *p_game_info = malloc (sizeof (struct game));
}

修复它:

void play_game()
{
    struct game *p_game_info = 0;
    /* struct game* */ p_game_info = malloc (sizeof (struct game));
}

错误意味着它实际所说的。您初始化(定义(了两次相同的变量p_game_info

根据标准,您可能有多个声明,就像这里一样(应该完美编译(

struct game *p_game_info;
struct game *p_game_info;
struct game *p_game_info;
struct game *p_game_info = 0;
....
void play_game()
{
    p_game_info = malloc (sizeof (struct game));
}

但它必须只有一个定义(初始化(!

有关 C 语言中的声明和初始化的更多信息,请访问此链接:定义和声明之间有什么区别?

编辑

正如 Weather Vane 所注意到的,多个声明的示例仅在文件范围内是可以的 - 并且称为"暂定声明">

相关内容

  • 没有找到相关文章

最新更新