stack around the variable data was corrupted
Код не самый лучший, но мне нужно отсортировать два массива, при запуске выходит ошибка, в чем именно ошибка понять не могу
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SWAP(a,b) {int tmp; tmp=a; a=b; b=tmp;}
#pragma warning(disable:4996)
void sort_hoor(int(*a)[], int left, int right)
{
int i = left, j = right, step = -1, condition = 1;
if (left >= right)
return;
do
{
if (condition == (*(*a + i) > *(*a + j)))
{
SWAP(*(*a + i), *(*a + j));
SWAP(i, j);
step *= -1;
condition = !condition;
}
j += step;
} while (j != i);
sort_hoor(a, left, i - 1);
sort_hoor(a, i + 1, right);
}
void parray(int(*a)[10])
{
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 10; j++) {
printf("%3d ", a[i][j]);
}
printf("\n");
}
printf("--------\n\n");
}
int main() {
int data[4][10] = {
{-22, -4, 5, 8, 0, 23 ,1 ,-9, 2, 35},
{-13, 5,6,9,1,0,0,0,1,-13},
{12,10,8,6,15,-3,-3,0,-3,1},
{0,-45,3,12,2,0,-9,-7,23,21}
};
int size = sizeof data / sizeof data[0][0];
for (int i = 0; i < 4; i++) {
sort_hoor(&data[i], 0, 10);
}
parray(data);
return 0;
}
Ответы (1 шт):
Массив у вас
int data[4][10]
т.е. в строке 10 элементов. Вы вызываете сортировку
sort_hoor(&data[i], 0, 10);
которая, в частности, делает
void sort_hoor(int(*a)[], int left, int right)
{
int i = left, j = right, step = -1, condition = 1;
SWAP(*(*a + i), *(*a + j));
Т.е. записывает, в частности, элемент с индексом 10, который на самом деле уже за рамками выделенной для массива памяти — по крайней мере для последней строки вашей матрицы. Да и в остальных строках вы кроме основной строки работаете с элементом следующей, чего явно при сортировке строки не должно быть.
Еще раз: в массиве типа a[N] есть только элементы с индексами от 0 до N-1.
А когда вы видите stack around the variable ... was corrupted — начинайте с поиска выхода за рамки выделенной для переменой памяти...