私はコード内のスピードを上げたいので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'を返し、元のポインタを失い、メモリリークを起こします。 –
私はあなたの解決策を捉えていませんでした。私は何を変えなければならないのですか? –