2013-09-27 28 views
0

我是新來編碼,我想創建一個復古風格的遊戲。 這個想法是讓遊戲中的每個方塊都成爲一個字符串的一部分。這裏是我到目前爲止的代碼:程序給program.exe已經停止工作約4秒後開始它

#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 has stopped working.

如果它可以幫助我得到當錯誤以下:

msg is closed(in cmd):process returned -1073741819 (0xc0000005)

編譯時我得到以下內容;

warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]

ps:編碼片段只是爲了測試,我沒有得到錯誤。

+7

媽呀,你就不能調試呢? – VsMaX

+0

爲什麼分配一個字符的括號? – SJuan76

+0

第11行的笑臉。 – Thomas

回答

1

這個問題可能是在這裏:

int a,b=0; 

在這裏,您聲明兩個變量,但只初始化它們的一個。這意味着a的值是未定義的,並將其用於例如s[a][b]是未定義的行爲。

1
if (b>77){ 

77已經是非法索引;測試需要使用>=。以下爲a

還有Joachim發現的問題。

+0

相同的問題與> 9秒[9] []超出了分配限制 – Jack

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){ 
//... 
+0

其實'{'_'}'是在C++ 11中很好(統一初始化) – sehe