do_while
@do_while
Full stack developer

Исправить ошибку — программа на С++?

Есть программа, в ней ошибка, помогите её исправить и понять почему выскакивает. В интернете нашел, что эта ошибка возникает, когда выходишь за грани массива - но вроде бы и не выхожу. Я подозреваю, что напутал что-то с ссылками и указателями (ничего в них не понимаю толком) - и это как бы следствие. Программа работает, результат выдает, после окончания уже ошибку эту выдает.
Run-Time Check Failure #2 - Stack around the variable 'match' was corrupted.
Run-Time Check Failure #2 - Stack around the variable 'game' was corrupted. (Одна из двух по очереди выскакивает)
5c0afc225031e315323984.png5c0afc295879b613736190.png
Код программы:
#include "pch.h"
#include <iostream>

using namespace std;

void dynamic_memory_allocation(int m, int* g)
{
	g = new int[m];
}

void get_data(int m, int* g)
{
	for (int i = 0; i < m; i++)
	{
		cout << "Введите исход матча №" << (i + 1) << " (кол-во очков: 0, 1, 3)." << endl;
		cin >> g[i];
		if (g[i] != 0 && g[i] != 1 && g[i] != 3) {
			cout << "Введено некоректное значение, повторите ввод." << endl;
			i--;
		}
	}
}

void sum_point(int m, int* g, int& s)
{
	for (int i = 0; i < m; i++)
		s += g[i];
}

void win_fall(int m, int* g, int& cw, int& cf)
{
	for (int i = 0; i < m; i++)
		!g[i] ? cf++ : cw++;
}

int main()
{
	setlocale(0, "");
	int match = 0, game, sum = 0, count_win = 0, count_fall = 0;

	cout << "Введите количество матчей" << endl;
	cin >> match;

	if (match < 0) {
		cout << "Некоректные входные данные";
		return 0;
	}

	dynamic_memory_allocation(match, &game);
	get_data(match, &game);

	sum_point(match, &game, sum);
	cout << "Общее количество очков = " << sum << endl;

	win_fall(match, &game, count_win, count_fall);
	cout << "Команда выиграла или сыграла в ничью " << count_win << " раз(а)" << endl;
	cout << "Команда проиграла " << count_fall << " раз(а)" << endl;
	return 0;
}
  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
do_while
@do_while Автор вопроса
Full stack developer
Переписал функцию, работает, вроде так. Спасибо тем, кто писал в комментарии, помогли.

#include "pch.h"
#include <iostream>

using namespace std;

int* dynamic_memory_allocation(int m)
{
	int *g;
	g = new int[m];
	return g;
}

void get_data(int m, int* g)
{
	for (int i = 0; i < m; i++)
	{
		cout << "Введите исход матча №" << (i + 1) << " (кол-во очков: 0, 1, 3)." << endl;
		cin >> g[i];
		if (g[i] != 0 && g[i] != 1 && g[i] != 3) {
			cout << "Введено некорректное значение, повторите ввод." << endl;
			i--;
		}
	}
}


void sum_point(int m, int* g, int& s)
{
	for (int i = 0; i < m; i++)
		s += g[i];
}

void win_fall(int m, int* g, int& cw, int& cf)
{
	for (int i = 0; i < m; i++)
		!g[i] ? cf++ : cw++;
}

int main()
{
	setlocale(0, "");
	int match = 0, sum = 0, count_win = 0, count_fall = 0;

	cout << "Введите количество матчей" << endl;
	cin >> match;

	if (match < 0) {
		cout << "Некорректные входные данные";
		return 0;
	}

	int *g;
	g = dynamic_memory_allocation(match);
	get_data(match, g);

	sum_point(match, g, sum);
	cout << "Общее количество очков = " << sum << endl;

	win_fall(match, g, count_win, count_fall);
	cout << "Команда выиграла или сыграла в ничью " << count_win << " раз(а)" << endl;
	cout << "Команда проиграла " << count_fall << " раз(а)" << endl;
	return 0;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы