コードで動的メモリ割り当てを使用していますが、サブクラスへのポインターを削除しようとすると問題が発生します。delete
キーワードを使用すると、最初に割り当てられたメモリが解放されないことがわかりました。この機能は、元の基本クラスで正常に機能します。
これは、arduinoでコードを実行していて、RAMがすぐに使い果たされてからクラッシュするため、問題になります。
次にいくつかのサンプルコードを示します。
class Base
{
public:
Base(){
objPtr = new SomeObject;
}
~Base(){
delete objPtr;
}
SomeObject* objPtr;
};
class Sub : public Base
{
public:
Sub(){
objPtr = new SomeObject;
}
};
// this works fine
int main()
{
for (int n=0;n<100;n++) // or any arbitrary number
{
Base* basePtr = new Base;
delete basePtr;
}
return 0;
}
// this crashes the arduino (runs out of RAM)
int main()
{
for (int n=0;n<100;n++) // or any arbitrary number
{
Sub* subPtr = new Sub;
delete subPtr;
}
return 0;
}
基本クラスのデストラクタの構文と関係があると思います。サブクラスのカスタムデストラクタを作成しても、同じ問題が発生します。
何か案は?