はじめまして。
DLLでmallocを使うとエラー…というより強制リターン(表現がわかりません)されてしまいます。
class __declspec(dllexport) PAD_CLASS{
public:
PAD_INFO_TYPE *Pad;
int Init(void){
Pad=(PAD_INFO_TYPE *)malloc(sizeof(PAD_INFO_TYPE));
if(Pad==NULL)return 1;
return 2;
}
};
ソースは重要と思われるところだけを書きました。
ちなみにPAD_INFO_TYPEは32バイトの構造体です。
このソースでInitを呼ぶと、通常は2が戻り、確保できなくても1が戻るはずなんですが、実際には0が戻ってきます。
調べたところ、mallocの次の命令にはプログラムが通ってないことがわかりました。
つまりmallocにより強制リターンされているのだと思います。
DLLにしたのがいけなかったのでしょうか。
あと、もう1つ気になったんですが、ソースを書き換えるたびに(なのかわかりませんが)Padの変数が確保されないことがたまに起きます。
mallocのエラーと関係あるのかな。
ちなみにリンクエラーはありませんでした。
よろしくお願いします。
自己解決しました。
問題はインポート時に__declspec(dllexport)を__declspec(dllimport)に変えていなかったことが原因でした。
リンクエラーがなかったので気づきませんでした。
ツイート | ![]() |