@ku4er99

Что переполняет массив?

Доброго времени суток! Компилятор выдает ошибку
Run-Time Check Failure #2 - Stack around the variable 'arr' was corrupted.


Задание: Сортировка столбцов матрицы по убыванию.

Код:
#include <iostream>
#include <time.h>

using namespace std;

#define N 9
#define M 6

void matrixsort(unsigned int *arr) {
	int temp;
	for (int i = 0; i < M - 1; i++) {
		for (int j = 0; j < N - i - 1; j++) {
			if (arr[j] < arr[j + 1]) {
				temp = arr[j + 1];
				arr[j + 1] = arr[j];
				arr[j] = temp;
			}
		}
	}
}

void showmatrix(unsigned int arr[N][M], string s) {
	string str = "Matrica " + s + " sortirovki:";
	cout << endl << str << endl << endl;

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) {
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}
}

int main() {
	unsigned int arr0[N];
	unsigned int arr[N][M];
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) {
			arr[i][j] = rand() % 50;
		}
	}
	showmatrix(arr, "do");
	int line = 0;
	while (line < N) {
		for (int j = line; j < line + 1; j++) {
			for (int i = 0; i < N; i++) {
				arr0[i] = arr[i][j];
			}
			arr0[M] = line;
			matrixsort(arr0);
			for (int i = 0; i < N; i++) {
				arr[i][j] = arr0[i];
			}
		}
		line++;
	}
	showmatrix(arr, "posle");
	return 0;
}

Собственно в силу своего незнания не могу найти ошибку.
Вот, что выдает на выходе:
5fdf8cc9ea3fd296559553.png
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
void matrixsort(unsigned int *arr) {
  int temp;
  for (int i = 0; i < M - 1; i++) {

Здесь должно быть написано for (int i = 0; i < N - 1; i++) потому что это сортировка, а не обход матрицы.

while (line < N) {
    for (int j = line; j < line + 1; j++) {

Это какая-то странная конструкция, из-за которой j доходит до N - 1, вызывая ошибку которую ты видишь. Вместо этого можно было выкинуть line вообще и написать просто
for (int j = 0; j < M; j++) {

arr0[M] = line;

Здесь ты портишь элемент матрицы заменяя его номером столбца. Отладка такая?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект