Удаление строки из матрицы на СИ

необходимо удалить подходящие под условие строки из матрицы. У меня задумка просто заменить по очереди каждый элемент с шагом в длину строки и понизить верхнюю границу при выводе(картинка для наглядности)

Вот сама функция, которая должна это делать, при вызове консоль крашится. Где я ошибся?

void string_move(int* p, int row, int len_row)
{
    for (int i = 0; i < row*len_row - len_row-1; i+ len_row)
    {
        *(p+i) = *(p+i+len_row);
        *(p+i+1) = *(p+i+len_row+1);
    }
    return 0;

}

Полная программа вот:

#include <stdlib.h>
#include <sti.h>
#define X 4
#define Y 2

int string_sum(int*, int);
void string_move(int*, int,int);
void input_matrix(int**, int, int);
void output_matrix(int**, int, int);

int main()
{
    int** a = (int**)calloc(X, sizeof(int*));
    for (int i = 0; i < Y; i++)
        a[i] = (int*)calloc(Y, sizeof(int));

    input_matrix(a, X, Y);
    output_matrix(a, X, Y);

    for (int i = 0; i<X; i++)
        if (string_sum(a[i], Y)%2==0)
            string_move(a, X, Y);
    return 0;
}

int string_sum(int* p, int len)
{
    int sum=0;
    for (int i = 0; i < len; i++)
        sum += *(p+i);
    return sum;
}

void string_move(int* p, int row, int len_row)
{
    for (int i = 0; i < row*len_row - len_row-1; i+ len_row)
    {
        *(p+i) = *(p+i+len_row);
        *(p+i+1) = *(p+i+len_row+1);
    }
    return 0;

}



void input_matrix(int** matrix, int n, int m)
{
        for (int i=0; i<n; i++)
            for (int j=0; j<m; j++)
                {
                    printf("matrix[%d][%d] = ", i, j);
                    scanf( "%d", &matrix[i][j]);
                }
}

void output_matrix(int** matrix, int n, int m)
{
    printf("\nMatrix: \n");
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            printf("%d ",matrix[i][j]);
        printf("\n");
    }

}

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