Когда вы получаете сообщение об ошибке с такой полезной информацией, вы должны сразу подумать: «У меня переполнение буфера». Затем найдите его.
Конечно, вот оно:
void assign(int a[20]) {
a[20] = {}; // <--- BOOM!
draw(a);
}
Ваш массив может хранить только 20 элементов. Когда вы сохраняете что-то в 21-м элементе, у вас неопределенное поведение.
Просто добавьте сюда дополнительную информацию. возможно , что вы думали, что ошибочная строка будет инициализировать нулем весь массив (как это происходит при определении переменной). Однако за пределами определения массива это не так. a[20] = {}
является присваиванием.
Если вы хотите обнулить массив, используйте std::fill
следующим образом:
std::fill(a, a+20, 0);
Однако я должен отметить, что нет смысла обнулятьмассив в контексте вашего кода, как написано. Он уже обнулен при входе, и функция draw
все равно инициализирует каждый элемент.