我将一段单片代码拆分为动态加载的库并main()
调用它。除了 stdc++,我没有使用其他库,也没有任何类,只是一个没有成员函数的模板结构。我没有明确分配任何内存,也没有删除或释放代码中的任何内容。我确实使用从list<T>
.
切换到 library + main 后,我遇到了间歇性崩溃。
*** glibc detected *** : free(): invalid pointer:
从回溯来看,似乎涉及到一个列表迭代器,但名称错位符号让人很难确定。
但是它不会在 gdb 中崩溃,valgrind 也不会检测到任何内存损坏或泄漏。
我以前没有构建共享库。这就是我正在使用的
g++ -fPIC -shared library_src.cpp -o libblaH.so
g++ main.cpp -lblaH
整个库都在一个源文件中,库函数被包装在一个 extern "C"
块中,以便 c 用户可以访问它,但现在我正在用 g++ 编译 main() 作为 c++ 代码。
现在,当我添加优化选项时,-O2
(特别是)我开始遇到崩溃。
我试过electricfence
它说无效指针不是由malloc分配的。
我将不胜感激有关如何追捕该错误的建议。我的感觉是我在某处使列表迭代器失效,但我不确定。我认为它们不能失效,除了已删除的条目。