DLLでmallocを使うとエラーがでます。

解決


やましん  2005-11-13 08:37:03  No: 59553

はじめまして。
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のエラーと関係あるのかな。

ちなみにリンクエラーはありませんでした。
よろしくお願いします。


やましん  2005-11-18 04:25:17  No: 59554

自己解決しました。
問題はインポート時に__declspec(dllexport)を__declspec(dllimport)に変えていなかったことが原因でした。
リンクエラーがなかったので気づきませんでした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加