Почему функция работает некорректно?

Функция должна удалять строки с четной суммой. Когда находится подходящая строка, на ее место становится соседняя и соответственно все остальные двигаются налево, а верхняя граница понижается. Где я ошибся? Фрагмент кода:

#define x 4
#define y 2
   
int main()
{
    int new_len = x;
    int ** a = (int**)calloc(x, sizeof(int* ));
    for (int i = 0; i < x; i++)
        a[i] = (int*)calloc(y, sizeof(int));

    input_matrix(a, x, y);

    printf("Before: \n");
    print_matrix(a, x, y);

    for (int j = 0; j < x; j++)
        for (int i = 0; i < x; i++)
            if (sum_row(a[i], y) % 2 == 0)
            {
                delete_row(a, i, new_len);
                new_len--;
            }


    printf("\nAfter:\n");
    print_matrix(a, new_len, y);
....

void delete_row(int** a, int i, int new_len){
    for (i ; i < new_len-1; i++)
        for (int j = 0; j < y; j++)
            *(*(a+i)+j) = *(*(a+i)+j+sizeof(int* ));

}

корректный пример корректный вывод

введите сюда описание изображения некоректный вывод


Ответы (0 шт):