2

我在 C++ 中的单例对象中遇到问题。这是解释:

问题信息:我有 4 个共享库(比如 libA.so、libB.so、libC.so、libD.so)和 2 个可执行二进制文件,每个文件都使用另一个处理文件的共享库(比如 libE.so)。

libE.so 的目的是将数据写入文件,如果可执行文件重新启动或文件大小超过一定限制,则会对其进行压缩并创建一个带有时间戳的新文件。它正在使用单例对象。它导出一个用于获取和使用单例的处理程序类。压缩只发生在上述两种情况下。用户/加载程序可执行文件只能指定文件的起始名称,处理程序类不提供其他控件。

libA.so、libB.so、libC.so 和 libD.so 具有几乎相同的行为。它们都有一个类和声明以及一个处理程序的对象,该处理程序获取 libE.so 中的单例实例并将其用于进一步的目的。

所有这些库都链接到两个可执行的二进制文件。如果两个可执行文件中只有一个运行,那么它很好,但是如果两个可执行文件一个接一个地运行,那么第一个启动的可执行文件的文件会被压缩。

调试信息:单例对象的构造函数和析构函数被调用了两次。(对于每个可执行文件)

单例的对象是一个静态对象,永远不会被删除。

可执行文件无法退出/返回给出:

* 检测到 glibc *(exe1 或 exe2):双重释放或损坏(!prev):some_addr *

使用二进制 valgrind 运行会得出上述错误是由于单例对象的析构函数造成的。

谢谢

4

0 回答 0