C++ 数组中消失/更改的奇怪符号、文本和实际字符

C++ 数组中消失/更改的奇怪符号、文本和实际字符,c++,debugging,symbols,C++,Debugging,Symbols,好的,正如你在上面看到的,有奇怪的东西出现,而不是通常的破折号 这是我的代码,因为它很长: 如果你想知道这是一场生活游戏,你可以选择使用修改过的规则。你的内存中可能有垃圾 内存中可能有垃圾 您已将数组的大小定义为10(即,它们包含从0到9的元素),但您的循环运行11个元素: char world[10] [10]; for (int m = 0; m < 11; m++) { for (int n = 0; n < 11; n++) { nei

好的,正如你在上面看到的,有奇怪的东西出现,而不是通常的破折号

这是我的代码,因为它很长:


如果你想知道这是一场生活游戏,你可以选择使用修改过的规则。

你的内存中可能有垃圾

内存中可能有垃圾

您已将数组的大小定义为10(即,它们包含从0到9的元素),但您的循环运行11个元素:

char world[10] [10];
for (int m = 0; m < 11; m++)
 {
     for (int n = 0; n < 11; n++)
     {
         neighbors = 0;
         //Begin counting number of neighbors:
         if(world[m-1][n-1] == '+')neighbors++;
         . . .
char-world[10][10];
对于(int m=0;m<11;m++)
{
对于(int n=0;n<11;n++)
{
邻居=0;
//开始计算邻居的数量:
如果(世界[m-1][n-1]='+')相邻++;
. . .
然后,当
m
n
为0时,您正在访问
世界[-1][1]


您需要确保索引保持在0到9(包括0到9)的范围内。

您已将数组定义为大小为10的数组(即,它们包含从0到9的元素),但循环运行11个元素:

char world[10] [10];
for (int m = 0; m < 11; m++)
 {
     for (int n = 0; n < 11; n++)
     {
         neighbors = 0;
         //Begin counting number of neighbors:
         if(world[m-1][n-1] == '+')neighbors++;
         . . .
char-world[10][10];
对于(int m=0;m<11;m++)
{
对于(int n=0;n<11;n++)
{
邻居=0;
//开始计算邻居的数量:
如果(世界[m-1][n-1]='+')相邻++;
. . .
然后,当
m
n
为0时,您正在访问
世界[-1][1]



您需要确保索引保持在0-9(含0-9)的范围内。

这个错误是什么时候出现的?是什么变化导致了它?序列看起来像是您在游戏缓冲区中写越界。您不使用
std::vector
std::string
有什么原因吗?您的错误如果你是的话,这会更明显。我还没有被介绍给这两个方面,以便更有效地使用它们,我只见过用于作图的向量。这个错误是什么时候出现的?是什么变化导致的?这个
yes
序列看起来可疑地像是你在写越界到游戏缓冲区中。有吗你不使用
std::vector
std::string
的原因是什么?如果你使用了,你的错误会更明显。我还没有被介绍给这两个方面,以便更熟悉地使用它们,我只看到vector用于作图。你能详细说明一下吗?我还注意到字母Y,e,s是最后的输入,但是它怎么能进入我的数组呢?为什么结尾也会有一个笑脸呢?它有时是一个空格符号或类似的东西。@合法:可能的原因可能是使用了未初始化的变量或覆盖了内存的边界,或者某种内存损坏。最好通过诸如val之类的内存分析工具来运行代码研磨,它会指出问题所在。你能详细说明一下吗?我也注意到字母Y、e、s是最后一个输入,但它怎么能进入我的数组?为什么结尾也有一个笑脸?它有时也是空格符号或其他类似的东西。@合法:可能的原因可能是使用了未初始化的变量或ov写内存的边界,或者某种内存损坏。最好通过ValGrand之类的内存分析工具来运行代码,它会指出你的问题。还有很多重复的代码,特别是在计算邻居的函数中。考虑将计算提取到一个单独的函数中,这将减少T。提高了复杂性,使代码更易于测试/修复/维护。编写生活游戏是了解边缘条件的一个极好方法。好的,目前我正在更新代码,以便在m或n为0时,它不会执行if语句:if(world[m-1][n-1]=='+'))邻居++;或任何类似的东西,这能解决我的问题吗?完成了,但笑脸仍然出现,它右边的两个空格也在那里,到底是什么导致了它?记住,数组从世界[0]运行到世界[9],因此,如果您还没有这样做,您还需要将循环中的条件更改为
<10
。当计数器等于9时,不要检查索引
m+1
n+1
。等等,我希望它们变为10,因为我有10行,10列,这就是为什么我在m<11时有很多重复D代码,特别是在计算邻居的函数中。考虑将计算提取到一个单独的函数中,这将减少复杂性,使代码更容易测试/修复/维护。编码生命游戏是学习边缘条件的一个极好的方法。好的,目前我正在更新我的代码,以便如果Mo。Rn为0,它不会执行if语句:if(world[m-1][n-1]='+')neights++;或者类似的,这能解决我的问题吗?完成了,但笑脸仍然出现,它右边的两个空格也在那里,到底是什么导致了它?记住,数组从world[0]运行到world[9],因此,如果您还没有这样做,您还需要将循环中的条件更改为
<10
。当计数器等于9时,不要检查索引
m+1
n+1
。等等,我希望它们变为10,因为我的行是10,列是10,这就是为什么我在m<11时使用它的原因