这个项目很大,我修改了其中一部分代码,出现了一个非常匪夷所思的问题:
这个是出问题的函数:
void SetModuleIdentities(std::vector<uint32_t>& identities)
{
std::vector<ModuleConfig> testVec;
for (uint32_t const& identity : identities)
{
printf("enter... testVec.size=%ld %ld\n", testVec.size(), testVec.capacity());
ModuleConfig newModule;
newModule.identity = identity;
testVec.push_back(newModule);
printf("leave... testVec.size=%ld %ld\n", testVec.size(), testVec.capacity());
}
}
这是 ModuleConfig 的定义:
struct ModuleConfig
{
ModuleConfig()
{
printf("ModuleConfig::constructor\n");
}
~ModuleConfig()
{
printf("ModuleConfig::destructor\n");
}
uint32_t identity;
std::string pdoMapName;
uint32_t pdoMapInOffset;
uint32_t pdoMapOutOffset;
};
执行的输出如下:
enter... testVec.size=0 0
ModuleConfig::constructor
leave... testVec.size=3353953467947191204 1
ModuleConfig::destructor
# 然后就崩溃了
这是部分调用栈信息(来源 sighandler ):
15:03:36 ecpanda exit with 11
crash time:Thu May 18 15:03:36 2023
./base/lib-linux/bin/ecpanda-generic(_Z10sigHandleriP9siginfo_tPv+0x96) [0x56266aff3e9a]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x14420) [0x7f528d9d7420]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x20) [0x7f528d50b6f0]
./base/lib-linux/bin/ecpanda-generic(_ZN12ModuleConfigD1Ev+0x2c) [0x56266b0075e6]
./base/lib-linux/bin/ecpanda-generic(_ZN15SlaveFileConfig19SetModuleIdentitiesERSt6vectorIjSaIjEE+0x136) [0x56266b017138]
./base/lib-linux/bin/ecpanda-generic(_Z23ESI_SetModuleIdentitiesiRSt6vectorIjSaIjEE+0x42) [0x56266b01692c]
我就 push_back
了一下,怎么就把 vector 干崩了呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.