стек вокруг переменной массива поврежден - PullRequest
1 голос
/ 04 октября 2019

Я пытаюсь передать свой массив через функции присваивания и отрисовки. Функция 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;
    }


}

1 Ответ

5 голосов
/ 04 октября 2019

Когда вы получаете сообщение об ошибке с такой полезной информацией, вы должны сразу подумать: «У меня переполнение буфера». Затем найдите его.

Конечно, вот оно:

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

Ваш массив может хранить только 20 элементов. Когда вы сохраняете что-то в 21-м элементе, у вас неопределенное поведение.

Просто добавьте сюда дополнительную информацию. возможно , что вы думали, что ошибочная строка будет инициализировать нулем весь массив (как это происходит при определении переменной). Однако за пределами определения массива это не так. a[20] = {} является присваиванием.

Если вы хотите обнулить массив, используйте std::fill следующим образом:

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

Однако я должен отметить, что нет смысла обнулятьмассив в контексте вашего кода, как написано. Он уже обнулен при входе, и функция draw все равно инициализирует каждый элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...