下面的代码真的很危险吗?doSmth 返回 vector 的对象,该对象应该从cont
( doSmth
) 复制,然后存储在 function 范围内的堆栈中test
。因此,我相信它只会在从test
.
struct MyData
{
double m_i;
};
std::vector<MyData> doSmth()
{
std::vector<MyData> cont(10);
return cont;
}
void test()
{
MyData& oneElement = doSmth()[0];
std::cout << oneElement.m_i << std::endl;
}
然而 valgrind 的想法不同:
Invalid read of size 8
<line 1 in test function oneElement>
Address 0x101281db8 is 8 bytes inside a block of size 72 free'd
std::vector<BlockInfo, std::allocator<BlockInfo> >::~vector() (stl_vector.h:314)
<line 2 in test function>
这是我的逻辑问题还是 valgrind 谎言?