数组变量周围的堆栈损坏
Posted
技术标签:
【中文标题】数组变量周围的堆栈损坏【英文标题】:stack around array variable corrupted 【发布时间】:2019-10-04 04:12:47 【问题描述】:我正在尝试通过我的分配和绘制函数传递我的数组。 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;
【问题讨论】:
你希望a[20] = ;
行做什么?
使用 std::fill 代替 a[20]=0。
【参考方案1】:
当您收到这样有用的信息的错误时,您应该立即想到“我有缓冲区溢出”。那就去找吧。
果然来了:
void assign(int a[20])
a[20] = ; // <--- BOOM!
draw(a);
您的数组只能存储 20 个元素。当您在第 21 个元素处存储某些内容时,您的行为未定义。
只是在此处添加更多信息。 可能您认为有问题的行会将整个数组初始化为零(就像定义变量时一样)。但是,在数组定义之外,情况并非如此。 a[20] =
是一个作业。
如果您希望将数组归零,请使用std::fill
,如下所示:
std::fill(a, a+20, 0);
但是,我应该指出,在您编写的代码上下文中将数组归零是没有意义的。它在输入时已经归零,并且draw
函数无论如何都会初始化每个元素。
【讨论】:
ive 实际上也尝试删除赋值括号,它似乎有效,但是当我进行函数调用并尝试打印函数的结果时,它没有列出随机的 20 个数字,但是而是看起来像十六进制代码的东西。请原谅我缺乏这方面的知识,但我刚刚开始使用 c++,我非常乐意接受帮助! 解密您所说的内容,我感觉您尝试使用cout << wins
打印数组。那只打印指针。如果要显示数组的内容,必须循环遍历并输出每个值。
是的,我通过绘图函数中的循环运行它,它就像一个魅力。非常感谢稻田以上是关于数组变量周围的堆栈损坏的主要内容,如果未能解决你的问题,请参考以下文章