※ ChatGPTを利用し、要約された質問です(原文:DLL内でnewしたインスタンスを外部で取得したい場合)
DLL内でnewしたインスタンスを外部で取得する方法
このQ&Aのポイント
C++を使用してDLL内部でnewしたインスタンスをDLL外部で取得する方法について、デバッグ時に発生するエラーについての解決策を教えてください。
DLL内部でnewしたクラスのインスタンスをDLL外部で取得する方法について教えてください。
VC++6.0を使用してWindows2000で開発している際、DLL内部でnewしたクラスのインスタンスをDLL外部で取得した際に発生するエラーの解決策を教えてください。
DLL内でnewしたインスタンスを外部で取得したい場合
今、C++を使用して、
DLL内部でnewしたインスタンスをDLL外部(下記のmain()関数)で取得して参照するプログラムを書いています。
<ここからDLL内部>
class clsTest
{
public:
clsTest();
~clsTest();
};
class Vect
{
private:
std::vector<clsTest *> clsList;
public:
Vect(){
clsTest *test01 = new clsTest();
clsTest *test02 = new clsTest();
clsTest *test03 = new clsTest();
this->clsList.push_back(test01);
this->clsList.push_back(test02);
this->clsList.push_back(test03);
};
~Vect(){
std::vector<clsTest *>::iterator p = this->clsList.begin();
while(this->clsList.size() != 0){
delete this->clsList[0];
this->clsList.erase(p, p+1);
}
};
std::vector<clsTest *> getClsList(){
return (this->clsList);
};
};
<ここまでDLL内部>
int main()
{
Vect *vec = new Vect();
std::vector<clsTest *> clsList = vec->getClsList();
delete vec;
return 0;
}
DLL内部でnewしたクラスは、DLL内部でdeleteしなければならないとの事なので、
取得後はDLL内部(vecのデストラクタ内)でdeleteするようにしましたが、デバッグしてみると、
main()関数の return 0; が終わる瞬間に以下のエラー(警告)が出力されます。
---------------------------------------------
Debug Assertion Failed!
・・・
Expression: _CrtIsValidHeapPointer(pUserData)
・・・
---------------------------------------------
main()関数でのDLLから取得した clsList が残っていることが問題なように思えますが、
どなたか解決策が分かる方がいらっしゃいましたらご教授よろしくお願い致します。
開発環境はWindows2000でVC++6.0を使用しています。
お礼
ありがとうございました。非常に参考になりました。とりあえず解決いたしました。