ファイルに結果を書き込むために使用した大規模なCコードライブラリがあります。私はそのようなのようなC++プログラム(一定のファイルI/Oを回避するため)にフロート*配列経由でのデータを返すために、それを変換:管理対象のC#で管理されていない無料のCコードメモリ
float* mgrib(...)
これはCに罰金働い++ところ、私はメモリ「自由」でした。多くのフィールドは、関数から引き出されなければならないので、これは、ループ内にある
IntPtr pointer = mgrib(...);
float[] result = new float[ size ];
Marshal.Copy(pointer, result, 0, size);
Marshal.FreeCoTaskMem(pointer);
:私は介して、適切にC#のにデータを得ることができました。それが256フィールド未満の場合、それは素晴らしい作品です。それ以上の場合は警告なしでクラッシュします。ファイルを適切に実行してから別のファイルを実行すると(合計が256を超える)、クラッシュします。私はCSの専門家にはほど遠いですが、256は偶然のようなものです。
洞察力に感謝します。ありがとう。
ライブラリーは実際にはCコードです。これはmallocで割り当てられました(私はCoTaskMemAllocをcで割り当てることはできますか?)。 FreeCoTaskMemはmallocと互換性がありますが、私はこれらのようなトピックについて私の頭の中にいます。応答していただきありがとうございます。 – Anthony