【发布时间】:2018-01-23 12:07:55
【问题描述】:
我正在尝试使用 realloc,因为我想提高代码的速度。当满足某个条件时,我想将一个 void 双指针重新分配到更大的大小,但我遇到了分段错误。这是代码。
if (p_bheap->currentSize == p_bheap->arraySize){
p_bheap->arraySize = p_bheap->arraySize*2 + 1;
p_bheap->pp_array = realloc(p_bheap->pp_array, p_bheap->arraySize);
}
然而,这会导致分段错误。但是,如果我制作自己的重新分配功能,它就可以工作。
if (p_bheap->currentSize == p_bheap->arraySize){
p_bheap->pp_array = bheap_reallocate(p_bheap);
}
void** bheap_reallocate(bheap* p_bheap){
p_bheap->arraySize = p_bheap->arraySize*2 + 1;
void** pp_newArray = malloc(p_bheap->arraySize*sizeof(void*));
for (int i = 0; i < p_bheap->currentSize; i++){
pp_newArray[i] = p_bheap->pp_array[i];
}
free(p_bheap->pp_array);
return pp_newArray;
}
是否有任何可以发现但我没有看到的明显错误?对于那些想知道我正在编写二进制堆的人。
【问题讨论】:
-
天哪,谢谢。我忘了乘法。
-
而且,顺便说一句,
p = malloc(count * sizeof *p);样式会避免这种问题(realloc 类似) -
在某些情况下,即使在内存不足的情况下也可以继续。必须根据具体情况决定。