繁体   English   中英

数组变量周围的堆栈损坏

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM