我想使用realloc,因爲我想提高代碼中的速度。當某個條件滿足時,我想將一個無效雙指針重新分配給一個更大的大小,但是我得到了一個分段錯誤。這是代碼。C - 在指針上使用realloc指針導致分段錯誤
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;
}
是否有任何明顯的錯誤可以發現,我沒有看到?對於那些想知道我正在編程一個二進制堆的人來說。
傳遞到大小['realloc'](http://en.cppreference.com/w/c/memory/realloc)就像傳遞到['malloc']的大小(HTTP ://en.cppreference.com/w/c/memory/malloc):***字節中的大小***(不是元素)。 –
順便說一句,不要將['realloc'](http://en.cppreference.com/w/c/memory/realloc)的結果指定回作爲參數傳遞的指針。如果['realloc'](http://en.cppreference.com/w/c/memory/realloc)失敗,它將返回'NULL',你將失去原始的指針並且有內存泄漏。 –
我沒有完全理解你的解決方案。我必須改變什麼? –