... したがって、DLL で作成された文字列または浮動小数点配列を返す場合、次の選択肢があります。
- 動的に割り当てられたバッファーへの永続ポインターを設定し、ポインターを返します。関数の次の呼び出しで、(1) ポインターが null でないことを確認し、(2) 前の呼び出しで割り当てられたリソースを解放し、ポインターを null にリセットし、(3) 新しく割り当てられたメモリ ブロックにポインターを再利用します。...
free を呼び出すと、次のエラー ダイアログが表示されます。
MSVC++ Debug Library HEAP CORRUPTION DETECTED: after Normal block(#135) at 0x....... CRT は、ヒープ バッファーの終了後にアプリケーションがメモリに書き込みを行ったことを検出しました。
これが私のコードです:
FP * g_FP;
extern "C" FP * __stdcall xllFill(long rows, long cols) {
if (g_FP != NULL) {
free(g_FP);
g_FP = NULL;
}
g_FP = (FP *)malloc(rows * cols * sizeof(double) + 2 * sizeof(unsigned short int));
for (int i = 0; i < rows * cols; i++) {
(*g_FP).data[i] = (double)i;
}
(*g_FP).rows = (unsigned short int)rows;
(*g_FP).cols = (unsigned short int)cols;
return g_FP;
}
私はC++に少し慣れていませんが、これが機能しない理由を一生理解できません。