1
我有一个底座和一个派生类:这个双免费错误为什么会发生?
在阿:
//Includes
class A {
protected:
static std::string a;
//other dummy code
};
在A.cpp
std::string A::a = "bar";
//other dummy code
在了Bh:
#include "A.h"
//Other includes
class B : public A {
public:
int c;
//other dummy code
};
Main.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文件都必须有自己的静态全局变量副本,但是如果派生类位于不同的共享库中,而基类位于不同的共享库中,并且存在静态变量基类?在派生类存在的库中,如何为基类中的静态变量分配/析构内存?
我制作了可描述的内容,并且没有损坏的双链表错误。 Valgrind报告没有错误。您可能需要提供有关您的平台,工具链和确切构建步骤的更多详细信息。 – 2014-10-08 19:58:37
没有MCVE,没有有用的答案。 – Deduplicator 2014-10-08 19:59:14