c – 内存仍然可以修复错误,但为什么?
我正在尝试使用共享库来构建模块化程序. 有两个要编译的cpp文件: 共享库,用.编译
文件使用共享库,编译用
要么
在FIX未定义的情况下,valgrind会报告许多仍然可访问的内存(5,373bytes),如果定义了FIX,则不会泄漏任何内存. 在共享库中使用iostream有什么问题? g -4.6,g -4.7和g -4.8会出现此问题. g -4.4没有显示这种行为.遗憾的是,我没有其他编译器进行测试(因此我不想切换到g -4.4). 更新: 使用附加标志-static-libstdc -static-libgcc编译共享库文件可以减少泄漏块的数量,但不能完全减少. -static-libgcc单独没有效果,-static-libstdc有一些效果,但没有两者兼有. 最佳答案
我不确定为什么没有深入研究libstdc代码,但是我认为iostreams库分配的内存在整个程序的持续时间内保持分配,在valgrind分配时会报告为一个问题.共享库,但在主程序中分配时不会.
首先,当标准库可能正在分配仍然可访问的内存时,我不知道为什么你想要“独立于标准库”的东西.修复程序要么根本不使用标准库,要么以不同方式使用它. 其次,“修复”是未定义的行为,因为您通过将std :: ios_base重新定义为std lib中的正确定义来违反One Definition Rule. 获得相同行为的正确方法是#include< iostream>在你的main.cpp文件中,包括< iostream>定义一个静态std :: ios_base :: Init对象.或者,只需#include< ios>然后定义静态变量(但不要重新定义std :: ios_base类型),但这基本上是< iostream>是的,所以你不妨使用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |