C ++继承和valgrind内存泄漏

炸弹人

我在用valgrind检查代码时发现内存泄漏。我不明白为什么会这样。我没有放置我的主要代码,而是制作了一个类似的程序来检查我的其他分配(char数组等)是否引起了该问题或类是否导致了此问题。

class zoo{
public:
    int x;
    zoo(int a){x = a;};
};

class doo:public zoo{
public:
    int y;
    doo(int a,int b):zoo(a){y = b;};
};

class foo : public doo{
public:
    String z;
    foo(int a, int b, const char *c):doo(a,b){
        z = c;
    };
};

zoo * something(const char * str){
    return (zoo *) new foo(1,2,str);
}
int main() {
    zoo * ex = something("blabla:sometext:blabla:overflow:message");
    cout<<"msg:"<< ((foo*)ex)->z<<endl;
    delete ex;
    return 0;
}

代码中没有花哨的东西。有基类,我想在最后一个类中获得一个指针作为第一个基类的指针。

当我编译时,此valgrind显示4分配3释放。

此代码有什么问题?也许我误解了继承的概念。但是当我称某物

something("blabla")

没有错误打印。

来自莫斯科的弗拉德

由于基类没有虚拟析构函数,因此在此语句中

delete ex;

zoo根据指针的静态类型,仅调用类的析构函数foo在此语句中创建的类型的对象的子对象

return (zoo *) new foo(1,2,str);

不被破坏。

您至少可以在类中定义析构函数,zoo例如

class zoo{
public:
    int x;
    zoo(int a){x = a;};
    virtual ~zoo() = default;
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

内存泄漏C -Valgrind

来自分类Dev

内存泄漏(Valgrind报告)(C ++)

来自分类Dev

使用valgrind分析的c ++ char内存泄漏

来自分类Dev

C++ 内存泄漏,Valgrind 消息误导?

来自分类Dev

C指针和内存泄漏

来自分类Dev

C ++指针和内存泄漏

来自分类Dev

让Valgrind从Python脚本调用的C ++程序中检测内存泄漏:

来自分类Dev

C ++ valgrind在Hello World中显示内存泄漏

来自分类Dev

目标c中的malloc和内存泄漏

来自分类Dev

C线程和curl内存泄漏

来自分类Dev

c++ 指针和内存泄漏 - 答案

来自分类Dev

Valgrind中的内存泄漏和错误

来自分类Dev

Valgrind显示内存泄漏,现在该怎么办?R:C()扩展

来自分类Dev

Valgrind检查内存泄漏时可能会丢失消息-C

来自分类Dev

检查内存泄漏时,Valgrind可能会丢失消息-C

来自分类Dev

内存泄漏C ++指针

来自分类Dev

C ++内存泄漏问题

来自分类Dev

C ++ strcpy内存泄漏

来自分类Dev

查找C ++内存泄漏

来自分类Dev

C ++内存泄漏修复

来自分类Dev

C中的内存泄漏

来自分类Dev

C ++ char []内存泄漏?

来自分类Dev

Netbeans C ++内存泄漏

来自分类Dev

C ++ strcpy内存泄漏

来自分类Dev

C链表内存泄漏

来自分类Dev

内存泄漏 Valgrind

来自分类Dev

C ++机器人,作业分配-由于内存泄漏而导致valgrind错误。确实需要一些提示

来自分类Dev

valgrind检测到的内存泄漏和库中的错误

来自分类Dev

valgrind检测到的内存泄漏和库中的错误