【发布时间】:2014-02-14 07:59:22
【问题描述】:
当我的程序的析构函数被调用时,我遇到了一些问题。我有这些类:
-
myModule是指针数组所在的基类。 -
myModule_in是一个子类,表示具有输入端口的模块(有一个myModule_out和一个myModule_inout,这里不会显示,因为它不是必需的)。 -
moduleC是输入端口模块之一(moduleA和moduleB是myModule_out和myModule_inout)。
我的模块:
class myModule
{
public:
myPort* secondary_ins[NUM];
myModule() {}
virtual ~myModule()
{
for(int i=0; i<NUM; i++)
{
if(secondary_ins[i])
delete secondary_ins[i];
}
}
virtual void connect(myModule &m) = 0;
};
我的模块输入:
class myModule_in : public myModule
{
public:
virtual ~myModule_in() {}
virtual void connect(myModule &m)
{
secondary_ins[ins] = new myPort();
...
}
};
模块C:
class moduleC : public myModule_in
{
public:
moduleC();
~moduleC() {}
void connect_modules() {...}
};
主要:
int main(...)
{
moduleA mA;
moduleB mB;
moduleC mC;
...
mA.connect(mB);
mB.connect(mC);
...
return 0;
}
此代码可以正确编译并且工作正常,直到执行结束,我在以下位置遇到分段错误:delete secondary_ins[i]; 被 return 0; 调用。奇怪的是,其他模块的destructor也被调用了,没有任何问题。也许处理从基类或其他东西继承的指针数组有问题?有什么想法吗?
谢谢:)
【问题讨论】:
-
哦!谢谢@735特斯拉!我从来没有想过!
标签: c++ arrays pointers segmentation-fault destructor