gpt4 book ai didi

c++ - 堆栈数组变量损坏

转载 作者:行者123 更新时间:2023-11-30 01:01:47 24 4
gpt4 key购买 nike

我正在尝试通过我的赋值和绘制函数传递我的数组。 assign 函数仅用于获取 wins 数组并为数组中的所有元素分配值 0。我的绘图函数用随机数 1-100 填充数组,数组中有 20 个数字。当我尝试编译时,我最终遇到一个运行时错误,指出我的变量(数组)wins 周围的堆栈已损坏。我应该从这里去哪里?

#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;
}


}

最佳答案

当您收到像这样有用的信息的错误时,您应该立即想到“我遇到了缓冲区溢出”。那就去找吧。

果然,这里是:

void assign(int a[20]) {
a[20] = {}; // <--- BOOM!
draw(a);
}

您的数组只能存储 20 个元素。当您在第 21 个元素存储内容时,您有未定义的行为。

只是在此处添加更多信息。您可能认为有问题的行会将整个数组零初始化(就像它在定义变量时所做的那样)。但是,在数组定义之外,情况并非如此。 a[20] = {} 是一个赋值。

如果您希望将数组归零,请按如下方式使用 std::fill:

std::fill(a, a+20, 0);

但是,我应该指出,在您编写的代码的上下文中没有必要将数组归零。它已经在入口处归零,draw 函数无论如何都会初始化每个元素。

关于c++ - 堆栈数组变量损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58229812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com