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;
}
我想,这是与压倒一切的记忆不应该?
答
你不能做到这一点:
game.answer = answer;
你声明的答案作为功能数组。您是不允许保留该地址并将其退回。
您的函数和其中使用的变量(如answer
)的内存会立即重用并被覆盖。
+0
如果引用指定变量作用域和生命周期的标准章节,将会非常有用。它位于[本文件草案]中的* 6.2.4对象的存储时间*(http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf)。 –
你有一个包含指针的结构。我假设你已经正确地初始化了那个指针?它指向一些范围内和分配的内存?您可以尝试创建一个[最小,***完整***和可验证示例](http://stackoverflow.com/help/mcve)向我们展示(并复制粘贴完整的输入和输出的程序,以及*期望*输出)? –
我生锈的水晶球说'game.answer'没有指向正确分配和初始化的内存。证明我是错的。 –
您没有为'game.answer'分配任何内存。您可以在第一次输入内容时使用'strdup',然后比较新的字符串长度,如果长度