ここで説明したのと同じ問題が、いくつかの配列の値をファイルに書き込む C++ 関数にあります。以下に、これを行うコードの一部を示します。
double *VAR = new double[NumPts];
for( iArray = 0; iArray<nArrays; iArray++)
for( iComp=0; iComp<nComponents; iComp++ )
{
for ( k=0; k<dims[2]; k++ )
{
kOffset = k * dims[0] * dims[1];
for ( j=0; j<dims[1]; j++ )
{
jOffset = j * dims[0];
for ( i=0; i<dims[0]; i++ )
{
id = i + jOffset + kOffset;
Values = sgrid->GetArray( iArray )->GetComponent( id, iComp );
VAR[ id] = Values;
}
}
}
INTEGER4 DIsDouble = 1;
// Writing the array into the file.
I = TECDAT112( &NumPts, &VAR[0], &DIsDouble );
}
// Close the file.
I = TECEND112();
sgrid というクラス インスタンスに 5 つの配列が格納されています。配列は、3 次元または 1 次元のいずれかです。コンポーネントの総数は 12 です。各コンポーネントは、GetArray および GetComponent 関数によって取得できます。上記のコードは、すべてのコンポーネントをループし、ライブラリ内の TECDAT112 関数によってそれらの値をファイルに書き込みます。(VS2008 x64 でデバッグ モードも使用しています。)
私の問題の原因は少し異なり、依存関係が VS2008 でコンパイルされていないためではないようです。実際、ループは引き続き完全に機能し、コンポーネント 1 ~ 9 の値が正常に書き込まれます。この問題は、コードが component#10 の値を書き込もうとしたときに発生します。そこから、次のエラーが表示されます。
「Microsoft Visual Studio C ランタイム ライブラリが致命的なエラーを検出しました」
関数 _CRT_DEBUGGER_HOOK を教えてくれます。配列とそのコンポーネントに問題がある場合、この仮説を検証するために、値をファイルに書き込む行をコメントアウトし、ループが 12 個のコンポーネントすべてを正常に通過することに気付きました。問題はメモリの問題が原因である可能性がありますか?