В программе я выделяю огромный многомерный массив, выполняю некоторое сокращение числа, тогда только первая часть этого массива представляет дальнейший интерес, и я хотел бы освободить только часть массива и продолжить работу сДанные в первой части.Я пытался использовать realloc, но я не уверен, что это правильный путь, поскольку я должен сохранить данные в массиве и желательно избегать копирования этого фрагмента в памяти.
#include <cstring>
#include <cassert>
#include <iostream>
using namespace std;
void FillArrayThenTruncate(char* my_array, const int old_size, int* new_size);
int main() {
const int initial_size = 1024*1024*1024;
char* my_array = static_cast<char*>(malloc(initial_size));
assert(my_array);
int new_size;
FillArrayThenTruncate(my_array, initial_size, &new_size);
for(int i = 0; i < new_size; ++i) cout << static_cast<int>(my_array[i]) << endl;
}
void FillArrayThenTruncate(char* my_array, const int old_size, int* new_size) {
//do something with my_array:
memset(my_array, 0, old_size);
for(int i = 0; i < 10; ++i) my_array[i] = i % 3;
//cut the initial array
*new_size = 10;
void* new_array = realloc(my_array, *new_size);
cout << "Old array pointer: " << static_cast<void*>(my_array) << endl;
cout << "New array pointer: " << new_array << endl;
my_array = static_cast<char*>(new_array);
assert(my_array != NULL);
}
ОБНОВЛЕНИЕ:
* Пожалуйста, не предлагайте использовать STL.Вопрос о массиве C.
* Спасибо "R Samuel Klatchko" за указание на ошибку в приведенном выше коде.