运行时检查失败 #2 - 变量"数字选择"周围的堆栈已损坏

Run-Time Check Failure #2 - Stack around the variable 'numberchoices' was corrupted

本文关键字:周围 选择 堆栈 已损坏 数字 运行时 失败 变量 检查      更新时间:2023-10-16

每次完成调试程序时,我都会遇到此终端错误。

我在做什么:

[这个程序是一个简单的彩票号码比较用户输入号码与非重复的随机彩票号码,例如,如果它得到 4 个 6 的权利怎么办]

但事实证明,该程序不起作用或至少不稳定。

这是我的代码:

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <time.h>
#include <ctime>
#include <algorithm>
using namespace std;
int main()
{
cout << "[La Loteria Electronica]n";
cout << "Escoge 6 n" << char(163) << "meros del (1 al 49): n";
int numberchoices[] = { 0 };
for (int w = 1; w < 7; w++)
{
cout << "N" << char(163) << "mero #" << w << ": ";
cin >> numberchoices[w];
} // user numbers

//lottery numbers
int i, j, k, nums[51];
srand((int)time(0));
for (i = 1; i < 50; i++) nums[i] = i;
for (i = 1; i < 50; i++)
{
j = (rand() % 49) + 1;
k = nums[i]; nums[i] = nums[j]; nums[j] = k;
}
cout << "The lottery numbers are:  ";
for (i = 1; i < 7; i++) cout << nums[i] << " ";
if (numberchoices[i] = nums[i])
{
cout << "gudn";
}
if (numberchoices == nums)
{
cout << "gud 2";
}
/**/


cout << "nn";
system("pause");

请 ?

int numberchoices[] = { 0 };
for (int w = 1; w < 7; w++)
{
cout << "N" << char(163) << "mero #" << w << ": ";
cin >> numberchoices[w];
} // user numbers

您正在声明一个大小为 1 的数组,然后将其使用到位置 6 ?

每次完成调试程序时,我都会遇到此终端错误。

我很惊讶每次开始调试时都没有出现终端错误。

从 1 到 6 的位置numberchoises的访问是 UB(未定义的行为)。也就是说:一切都可能发生。

解决方案:尝试使用

int numberchoices[7] = { }; // initialize all elements to zero!

另一点

if (numberchoices == nums)

不确定你得到了你所期望的。

是否要将对应于numberchoices的整数指针(int[1]建议int[7])的整数指针与对应于nums(int[51])的整数指针进行比较?