簡體   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