gpt4 book ai didi

c++ - 为什么会出现这种 double-free 错误?

转载 作者:行者123 更新时间:2023-11-30 04:00:33 25 4
gpt4 key购买 nike

我有一个基类和一个派生类:

在 A.h 中:

//Includes
class A {
protected:
static std::string a;
//other dummy code
};

在 A.cpp 中

std::string A::a = "bar";
//other dummy code

在 B.h 中:

#include "A.h"
//Other includes
class B : public A {
public:
int c;
//other dummy code
};

主要.cpp:

#include "A.h"
#include "B.h"

int main() {
printf("foo");
return 0;
}

现在我将 A.cpp 和 B.cpp 编译成两个单独的共享库,分别为“a.so”和“b.so”,然后将它们链接到 Main.cpp。当我运行该程序时 - 它因损坏的双链表错误而退出。使用 valgrind 运行我看到有一个无效的免费错误。为什么会这样?

我知道每个 .so 文件都必须有自己的静态全局变量拷贝,但是当派生类在不同的共享库中而基类在不同的共享库中并且有静态变量时会发生什么基类?如何在存在派生类的库中为基类中的静态变量分配/销毁内存?

最佳答案

I understand that each .so file must have its own copy of static global variables

你理解不正确,除非你将 A.o 链接到 a.so 和 b.so 中,每个 .so 文件将不会有它自己的静态 A::a 拷贝。 A.o 应该只链接到 a.so,b.so 应该链接到 a.so,而不是 A.o

关于c++ - 为什么会出现这种 double-free 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26265222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com