在一个程序中,我分配一个巨大的多维数组,做一些数字运算,然后只有该数组的第一部分更感兴趣,我想释放数组的一部分并继续处理数据在第一部分。我尝试使用realloc,但我不确定这是否是正确的方法,因为我必须保留数组中的数据,并且最好避免将该块复制到内存中。有没有办法只释放C/C++中的动态分配数组的一部分(收缩现有数组)?
#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);
}
UPDATE:
*请不要打扰建议使用STL。问题是关于C数组。
*感谢“R Samuel Klatchko”指出上述代码中的错误。
感谢您的纠正 - 我太懒惰阅读功能描述和思想,realloc将修改my_array,而它恰巧会返回一个新值。 – 2010-07-01 12:05:54
一般来说,这是否尝试将'my_array'放在同一位置? – alfC 2017-12-15 05:25:56