[英]stack around array variable corrupted
我试图通过我的分配和绘制函数传递我的数组。 分配 function 仅存在获取 wins 数组并为数组中的所有元素分配 0 值。 我的绘图 function 用随机数 1-100 填充数组,数组中有 20 个数字。 当我尝试编译时,我最终得到一个运行时错误,指出我的变量(数组)wins 周围的堆栈已损坏。 我应该从这里到哪里 go?
#include<iostream>
#include <ctime>
using std::cout; using std::cin; using std::endl;
void draw(int a[]);
void assign(int a[]);
int sizeofarray = 20;
int main() {
int wins[20] = {};
assign(wins);
cout << "compiled!" << endl;
}
void assign(int a[20]) {
a[20] = {};
draw(a);
}
void draw(int a[])
{
srand(time(nullptr));
int rannum = (1 + rand() % 100);
for (int i = 0; i < 20; i++) {
a[i] = 1 + rand() % 100;
}
}
当您收到这样有用的信息错误时,您应该立即想到“我有缓冲区溢出”。 然后 go 寻找它。
果然,这里是:
void assign(int a[20]) {
a[20] = {}; // <--- BOOM!
draw(a);
}
您的数组只能存储 20 个元素。 当您在第 21 个元素中存储某些内容时,您的行为未定义。
只需在此处添加更多信息。 您可能认为有问题的行会将整个数组初始化为零(就像定义变量时一样)。 但是,在数组定义之外,情况并非如此。 a[20] = {}
是一个赋值。
如果您希望将数组归零,请使用std::fill
如下:
std::fill(a, a+20, 0);
但是,我应该指出,在您编写的代码上下文中将数组归零是没有意义的。 它已经在入口处归零,并且draw
function 无论如何都会初始化每个元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.