C++;for循环中途崩溃 我刚刚开始学习C++,我现在把它用在循环中,每次执行它时都会崩溃(它是大代码的一部分) void placeItem() { 内部定居者=20,城堡=5,塔楼=10,矿井=10,E=100; int player1Settler=0,player1Castle=0,player1Tower=0,player1Mine=0; int player2Settler=0,player2Castle=0,player2Tower=0,player2Mine=0; 整数骰子,x,y; currentBoardStatus(); 您的代码可能因为以下原因而崩溃 string gameBoard(int i, int j) { string arr[10][10]; return arr[i][j]; }
及C++;for循环中途崩溃 我刚刚开始学习C++,我现在把它用在循环中,每次执行它时都会崩溃(它是大代码的一部分) void placeItem() { 内部定居者=20,城堡=5,塔楼=10,矿井=10,E=100; int player1Settler=0,player1Castle=0,player1Tower=0,player1Mine=0; int player2Settler=0,player2Castle=0,player2Tower=0,player2Mine=0; 整数骰子,x,y; currentBoardStatus(); 您的代码可能因为以下原因而崩溃 string gameBoard(int i, int j) { string arr[10][10]; return arr[i][j]; },c++,for-loop,C++,For Loop,及 x和y的值介于1和10之间,但arr的大小是10,其最大有效索引是9。因此,如果x或y是10(或两者都是),它们将访问未定义的内存 除此之外,您的代码还有许多缺陷,如: dice=4当想要比较该值时(正如@KeithSmith指出的那样,实际上将值4分配给dice) 您在int main()中创建string arr,从不使用它,而是在string gameBoard()中声明另一个string arr,然后从中返回索引(未定义) 在for循环中放置一个断点,按F5 15次,然后按next语
x
和y
的值介于1和10之间,但arr的大小是10,其最大有效索引是9。因此,如果x
或y
是10(或两者都是),它们将访问未定义的内存
除此之外,您的代码还有许多缺陷,如:
dice=4
当想要比较该值时(正如@KeithSmith指出的那样,实际上将值4分配给dice
)int main()
中创建string arr
,从不使用它,而是在string gameBoard()中声明另一个string arr
,然后从中返回索引(未定义)
在for循环中放置一个断点,按F5 15次,然后按next语句按钮并逐行执行直到它退出。您应该会发现问题。
gameBoard(x,y)
这是否返回对std::string
的引用?如果您将下拉框链接发布到整个代码,我将对其进行调试。注意:If(dice=4…和If)(dice=6…分别为dice分配值4和6。您需要if(dice==4…等)。标准的编码技术是始终将常量放在相等比较的第一位。if(4==dice…,因为if(4=dice)是非法的,并且会产生编译错误。此外,x和y似乎在1到N的范围内。这是gameboard期望的范围吗(x,y)?另外,你有没有打电话给其他地方的srand(…)来随机化rand()?gameBoard定义中有什么?顺便说一句,问题可能就在那里?非常感谢,我不敢相信我忽略了这一点!gameBoard函数到底要做什么?:/gameBoard每次运行时,它都声明一个字符串的2D数组,并从该数组返回一个元素?您应该将字符串arr
设置为全局数组,并在ga中使用它meBoard()
。另外,在获取索引之前进行一些验证也不是一个坏主意:)string arr[10][10];//全局和string&gameBoard(int i,int j){return arr[i][j];}
string gameBoard(int i, int j)
{
string arr[10][10];
return arr[i][j];
}
x = rand() % 10 + 1;
y = rand() % 10 + 1;