Таким образом, у меня есть матрица, которая была создана таким образом:Как я освобождаю определенные строки и столбцы матрицы
int **mat(int nl, int nc) {
int i;
int **v = malloc(nl * sizeof(int *));
for (i = 0; i < nl; i++) {
v[i] = calloc(nc, sizeof(int));
}
return v;
}
Скажем, после ввода, это:
0 1 2 3 4 5
1 2 3 4 5 6
2 3 4 5 6 7
Я бы хотите сохранить только первые 2 строки и первые 3 столбца и освободить память других строк и столбцов, чтобы он выглядел так:
0 1 2
1 2 3
Как это сделать?
В коде отсутствует матрица (ака 2D-массив). 'int **' не является двумерным массивом, не может указывать на один или представлять его. Почему вы хотите освободить память? Просто не используйте все пространство. С частичным освобождением почти ничего не получается, вы просто взламываете пространство памяти. – Olaf
Я вижу вашу мысль. Но если у вас есть большие строки, такие как 10000 элементов и размер, скажем, 4000 элементов, это может быть интересно, потому что у вас будет место для другой «матрицы», такой как это, и не будет никакой копии памяти в процессе «realloc». Память фрагментирована, но также и матрицы. Это зависит от разницы размеров строк до/после изменения размера. –