@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
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
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;

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

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

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