0

double の配列を動的に割り当てるクラス v があります。Entries は、この配列の先頭へのポインタです。間隔を使用すると、エントリをスキップできます。たとえば、3 つおきのエントリのみを考慮したい場合、間隔は 3 になります。

double& v::operator[] (const int n) {
    return entries[n*spacing]; 
}

この添字演算子はコンパイルされますが、ヒープが破損します。私の Web 検索に基づいて、Visual Studio は "entries[n*spacing]" の結果を一時的に格納し、一時的な参照を返していると思います。割り当て解除されたメモリへのこの参照に書き込もうとすると、ヒープの破損が発生します。

誰かが回避策のアイデアを持っていますか?

4

1 に答える 1

0

Visual Studio は "entries[n*spacing]" の結果を一時的に格納してから、一時的な参照を返していると思います。

それは正しくありません。がorとしてentries定義されていると仮定すると、参照が返され、その参照が添字演算子によって返されます。double entries[];double* entriesentries[i]

問題の原因は別の場所にあります。おそらくn*spacing、配列の範囲外にあるか、entries参照がアクセスされるまでに全体の割り当てが解除されている可能性があります。

于 2011-10-18T16:11:21.100 に答える