初めて投稿します、まごです。よろしくお願いします。
ある構造体をDllへ渡してDll内の関数でmallocしてデータを格納し、
実行元の関数でDllで取得したデータを表示するというプログラムを作成
したんですが、構造体のメモリーを実行元の関数で開放する時にアドレス違反が
必ず起きます。
取得したデータへのアクセスには特に支障はないのですが、freeを行うと動作が
おかしくなるようです。
Dll内で取得するデータは文字列で不定長なためmallocしています。
過去にこのような経験をされた方いらっしゃったらアドバイスお願いします。
問題になっている構造体は下記
呼び出し元で「S_RESULT_TBL」をmallocしDll内で「stRetData」,「sRetFilePath」,「sRetData」をmallocしています。
OSはWindows2000Proです。
以上、よろしくお願いします。
// 結果データテーブル
typedef struct {
int iRetDataLen; // 返信データ内容の長さ
int iRecFilePathSize; // ヒットレコードファイルフルパスサイズ
char *sRetFilePath; // ヒットレコードファイルフルパス
int iHitRecOffset; // ヒットレコードオフセット値
int iHitRecLen; // ヒットレコードレングス
char *sRetData; // 返信データ内容
} S_RESULT_DATA_TBL;
// 結果テーブル
typedef struct {
char sProcessID[21]; // プロセスID
int iRetRecNo; // 返信開始レコード番号
int iFlg;
int iHitCnt; // ヒット件数
int iDataRetCnt; // データ返信件数
S_RESULT_DATA_TBL **stRetData; // 返信データ
} S_RESULT_TBL;
|