malloc()成功分配内存后,有时程序需要增加数组的大小。虽然malloc()已经成功工作,但realloc()失败了。
我使用了以下代码来处理realloc()的失败情况。 这里的T是模板参数。array是类型为T的指针,_size是已经使用的数组总索引,_maxSize是可用索引的最大数量。 当_size达到_maxSize时,需要重新分配内存。
if(_size == _maxSize){
_maxSize *= 2;
T *temp;
temp = (T *) realloc( array, sizeof( T ) * (_maxSize) ) ;
if(temp == NULL){
printf("...reallocation of memory failed...\n");
exit(0);
}
else{
array = temp;
}
}
虽然realloc()的失败已经处理了,但程序确实需要增加数组大小,即使realloc()失败,我也不知道如何执行重新分配。
realloc()
失败,任务几乎失败了。该应用程序可能需要大量内存或可用内存非常有限。(这是嵌入式系统吗?)您必须查找应用程序中的内存泄漏或确实需要更多内存。在后一种情况下,我会考虑将数据(从文件中读取?)拆分为部分进行处理。 - Scheff's CatC++
,并且T
是一个模板类型,那么你必须非常小心地在正确的时间手动调用其放置构造函数/析构函数 - 你没有提供所有代码,所以我们不能验证你是否这样做。事实上,使用realloc
甚至不会给你机会去做对 - 它有时会移动内存,而你没有机会调用析构函数。你简单地不想以这种方式做 - 它只能在有限数量的情况下工作,并且太危险了。 - Mike Vine