0

ここで説明したのと同じ問題が、いくつかの配列の値をファイルに書き込む 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 個のコンポーネントすべてを正常に通過することに気付きました。問題はメモリの問題が原因である可能性がありますか?

4

0 に答える 0