3

スレッドでは、ファイルが継続的に開かれ、閉じられ、破棄されます。これにより問題が発生しますか?

ここにコードがあります

 StreamWriter file1 = new StreamWriter(filepath4, true);
                        for (int i = 0; i < ChannelValueForTcp; i++)
                        {
                            file1.WriteLine(data[i]);
                        }
                                file1.WriteLine(data[data.Length-1]);
                                file1.WriteLine(data[data.Length - 2]);
                                file1.Close();
                                file1.Dispose();

ここに画像の説明を入力

私が行き詰まっているのを助けてください。(これはランダムに表示され、コードを 8 時間連続して実行しようとしています。)

編集:

他のスレッドは機能せず、このファイルに関連することも何もしません。ここだけ使用されています。実行中の他のスレッドがあり、同じエラーが発生しますが、45 分 - 5 時間のテスト後にランダムに発生します。

ここにcコードがあります。ダウンロードしてください

[DllImport("ConsoleApplication2.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern int main_c();

 public string[] tcp(string peer, int port)
        {

            int i = main_c();//the c code writes to a file called akash.txt and returns = 0 if it is successful. Then I read the file and do some functions on it. 

 if (i == 0)
            {
                StreamReader objReader = new StreamReader("akash.txt");
4

1 に答える 1

2

ランダム クラッシュと FatalExecutionEngineError 例外は、通常、スタックまたはヒープの破損に関連付けられており、コードのさらに下まで隠れたままになる可能性があります。正しい呼び出し規則、パラメーターの型、および戻り値の型を使用して、すべての C++ 関数を正しくマーシャリングしたことを確認してください。

Microsoft は、メッセージの考えられる原因を次のように指定しています。

CLR が致命的に破損しています。これはほとんどの場合、データの破損が原因で発生します。データの破損は、不正な形式のプラットフォーム呼び出し関数の呼び出しや無効なデータを CLR に渡すなど、さまざまな問題によって発生する可能性があります。

提供したコードから判断すると、宣言は正しいように見えるため、マーシャリングした別の関数が問題を引き起こしている可能性があります。

C++ コードが安定しており、問題の原因ではないことを確認してください。「res」バッファの削除または充填に関連している可能性があると思います。

呼び出し規約を __cdecl 以外に設定するフラグを使用して DLL をコンパイルしている可能性があります。これを確認するには、プロジェクトを右クリックし、[プロパティ] > [C/C++] > [詳細設定] > [呼び出し規約] を選択します。

于 2013-07-06T12:02:22.807 に答える