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 шт):

Автор решения: Harry

Массив у вас

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 — начинайте с поиска выхода за рамки выделенной для переменой памяти...

→ Ссылка