СИ | Удалить числа кратные k из динамической матрицы

#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>

int main() {
    int n;
    int m;
    int k;
    int helpa;
    int genialnoereshenie[1000];
    
    setlocale(LC_ALL, "");
    printf("Размерность: \n");
    scanf("%d %d", &n, &m); while (getchar() != '\n');
    if ((n < 2) || (m < 2)) { puts("Неправильный ввод!"); return 0; }
    int** matrix = (int**)calloc(n, sizeof(int*));
    if (!matrix) { puts("Мало памяти!"); return 0; }
    for (int i = 0; i < n; i++) {
        matrix[i] = (int*)calloc(m, sizeof(int));
        if (!matrix[i]) {
            for (int j = 0; j < i; j++) {
                free(matrix[i]);
                free(matrix);
                puts("Мало памяти!");
                return 0;
            }
        }
    }
    int kilka = 0;
    printf("k: ");
    scanf("%d", &k);
    while (getchar() != '\n');
    for (int i = 0; i < n; i++)  for (int j = 0; j < m; j++) scanf("%d", &matrix[i][j]); while (getchar() != '\n');
    printf("\n------------------------------ \n");
    printf("1) Исходная: \n");
    for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) printf("%d\t", matrix[i][j]); printf("\n"); }
    printf("------------------------------ \n");
    int** mass = (int**)calloc(n, sizeof(int*));
    for (int i = 0; i < n; i++) {
        mass[i] = (int*)calloc(m, sizeof(int));
        if (!mass[i]) {
            for (int j = 0; j < i; j++) {
                free(matrix[i]);
                free(matrix);
                free(mass);
                free(mass[i]);
                puts("Мало памяти!");
                return 0;
            }
        }
    }
    //
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            memcpy(&mass[i][j], &matrix[i][j], sizeof(int));
        }
    }
    int c = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (mass[i][j] % k == 0) {
                memcpy(&matrix[i][j], &c, sizeof(int)); // ВМЕСТО ЗАМЕНЫ НА 0 НУЖНО ПРОСТО УДАЛИТЬ ЭЛЛЕМЕНТ
            }
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            printf("%d\t", matrix[i][j]);
        }
        printf("\n");
    }
    free(matrix);
    free(mass);
}

Написал значительную часть кода, но как удалить элемент из динамической матрицы, а не заменить его на ноль - не знаю. Прошу помочь.


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