C中的结构出现内存错误

问题描述:

以下代码将来会删除game.answer的内容,我无法弄清楚原因。C中的结构出现内存错误

这是结构:

typedef struct 
{ 
    int guesses, guessesAllowed; 
    char* answer; 
    char max; 
} GameState; 

这是我的函数建立一个新的结构:

GameState makeGame(int guessesAllowed, int numOfPositions, char max, 
    int seed) 
{ 
    GameState game; 
    char answer[9]; 

    answer[0] = '\0'; 

    game.guesses = 0; 
    game.guessesAllowed = guessesAllowed; 
    game.answer = answer; 
    game.max = max; 

    getAnswer(answer, numOfPositions, max, seed); 

    return game; 
} 

我想,这是与压倒一切的记忆不应该?

+1

你有一个包含指针的结构。我假设你已经正确地初始化了那个指针?它指向一些范围内和分配的内存?您可以尝试创建一个[最小,***完整***和可验证示例](http://stackoverflow.com/help/mcve)向我们展示(并复制粘贴完整的输入和输出的程序,以及*期望*输出)? –

+2

我生锈的水晶球说'game.answer'没有指向正确分配和初始化的内存。证明我是错的。 –

+1

您没有为'game.answer'分配任何内存。您可以在第一次输入内容时使用'strdup',然后比较新的字符串长度,如果长度

你不能做到这一点:

game.answer = answer; 

你声明的答案作为功能数组。您是不允许保留该地址并将其退回。

您的函数和其中使用的变量(如answer)的内存会立即重用并被覆盖。

+0

如果引用指定变量作用域和生命周期的标准章节,将会非常有用。它位于[本文件草案]中的* 6.2.4对象的存储时间*(http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf)。 –