次のコードは本当に危険ですか?doSmthは、ベクトルのオブジェクトを返します。これは、cont
(doSmth
)からコピーして、関数のスコープ内のスタックに格納する必要があります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の嘘の問題ですか?