【发布时间】:2019-11-01 21:33:50
【问题描述】:
使用 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()失败了如何执行重新分配。
【问题讨论】:
-
C 还是 C++?答案不一样!
-
这段代码是用c++写的@BasileStarynkevitch
-
您是否认为分配器出于恶意拒绝分配,并且您可以通过
realloc以外的其他方式访问某个隐藏的内存存储区? -
"这里 T 是模板参数" - 所以代码是 C++,即使它使用了一种非常 C 风格的分配方式记忆
-
注意(与问题无关):如果这是
c++并且T是模板类型,那么您必须非常小心地手动调用其放置构造函数/ 析构函数在正确的时间 - 你没有提供所有的代码,所以我们无法验证你正在这样做。事实上,使用realloc甚至没有给你机会做对——它有时会移动内存,你不会有机会调用析构函数。您只是不想这样做 - 它只能在有限的场景中工作,而且太危险了。
标签: c++ pointers dynamic-memory-allocation realloc