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