0

我是编码新手,我正在尝试创建一个复古风格的游戏。这个想法是让游戏中的每个方格成为字符串的一部分。这是我到目前为止得到的代码:

#include <iostream>
#include <stdlib.h>

using namespace std;

int main(){
   int a,b=0;
   char s[9][77]={};

   while (true) {
     s[a][b]={'_'};
     b+=1;
     if (b>77){
        a+=1;
        b=0;
     }
     if (a>9){
        a=0;
        b=0;
        break;
     }
   }
   s[0][0]={'H'};

   cout << "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@";
   cout << "@" <<s[0][0]<<s[0][1];

   return 0;
}

当我在大约 4 秒后运行它时,它给了我:

program.exe 已停止工作。

如果它有助于我在错误时得到以下信息:

味精已关闭(在 cmd 中):进程返回 -1073741819 (0xc0000005)

我在编译时得到以下信息;

警告:扩展初始化列表仅适用于 -std=c++11 或 -std=gnu++11 [默认启用]

ps:代码片段仅用于测试我没有出错。

4

3 回答 3

2

几个问题:

 int a, b=0; // a is not initialized

下面的while循环将访问

while (true) {
 s[a][b] = {'_'};  // b will be 78, access s[a][78] out of bounds
 b+=1;
 if (b>77){
 //...
于 2013-09-27T11:46:40.187 回答
1

问题大概出在这里:

int a,b=0;

这里你声明了两个变量,但你只初始化了其中一个。这意味着 的值a是未定义的,在 eg 中使用它s[a][b]是未定义的行为。

于 2013-09-27T11:42:51.023 回答
1
if (b>77){

77已经是非法索引;测试需要使用>=. 与a下面的相同。

还有 Joachim 发现的问题。

于 2013-09-27T11:43:42.513 回答