[英]Stack around the variable ' ' was corrupted
void GameBoard::enterShips()
{
char location[1];
int ships = 0;
int count = 1;
while(ships < NUM_SHIPS)
{
cout << "Enter a location for Ship " << count << ": ";
cin >> location;
cout << endl;
Grid[location[0]][location[1]] = SHIP;
ships++;
count++;
}
}
我正在寫一個戰艦游戲。 我的板子布局正常工作,計算機隨機生成。 現在,我正在研究此方法,以提示用戶輸入船只的坐標。當我運行該程序時,它允許我輸入5艘船只。 當我進入第六艘船時,它給了我這個錯誤。
變量位置周圍的堆棧已損壞。
Ive在網上尋找答案,卻沒有發現任何排他的內容。
任何幫助,將不勝感激。
location
是單個char
的數組。
沒有location[1]
。
您正在向用戶提示location
數組的內存地址。 您應該分別詢問位置索引:
void GameBoard::enterShips()
{
int location[2];
int ships = 0;
int count = 1;
while(ships < NUM_SHIPS)
{
cout << "Enter a location for Ship " << count << ": ";
cin >> location[0];
cin >> location[1];
cout << endl;
Grid[location[0]][location[1]] = SHIP;
ships++;
count++;
}
}
注意int location[2];
因為大小為1的數組只能容納一個元素。 我也將元素類型更改為int。 從控制台讀取字符將導致ASCII值,這可能不是您想要的。
您使location
變量只能容納一個字符。 您訪問它並期望它至少包含2個字符。 如果您使用的是cin並希望准確讀取兩個字符,則更好的方法是:
char locationX, locationY;
// ...
std::cin >> locationX >> locationY;
// ...
Grid[locationX][locationY] = SHIP;
cin >> location;
location
是一個char
數組。 這不能成功,因為當您從流中讀取一個char
數組時,必須添加一個空終止符(需要一個字符)。 您將不可避免地超出數組的范圍。
您可以使用std::string
,這將幫助您避免任何緩沖區溢出問題:
std::string location;
if (!(std::cin >> location)) {
// handle input error
}
還要注意,您可能需要將數字的字符串表示形式轉換為數值。 您可以通過從流中讀取兩個int
對象來輕松實現此目的:
int x_location, y_location;
if (!(std::cin >> x_location >> y_location)) {
// Handle input error
}
if (x_location >= X_DIMENSION || x_location < 0 ||
y_location >= Y_DIMENSION || y_location < 0) {
// Handle out-of-range error
}
// use x_location and y_location
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.