http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52967
Bug #: 52967
Summary: Segmentation fault on std::vector destruction
Classification: Unclassified
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: [email protected]
ReportedBy: [email protected]
GCC version:
4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)
Environment:
Ubuntu 11.10 amd64
I've also reproduced it at:
Ubuntu 11.10 amd64, gcc version 4.4.6
Windows 7 x64, mingw version 4.6.2.
Gentoo x86, gcc-4.5.3-r2
Arch Linux x64, gcc version 4.7.0
How to repeat:
main.cpp:
#include <vector>
struct Foo
{
double a, b, c, d;
};
std::vector<Foo> v;
int steps = 3;
double run()
{
if (steps == 0)
return 1.0;
steps--;
v.push_back(Foo());
v[0].a = run();
//double tmp = run();
//nodes[0].a = tmp;
return 1.0;
}
int main()
{
run();
return 0;
}
$ g++ main.cpp -o main && ./main
results in segmentation fault. The backtrace shows the problem is in vector
destructor.
This one is very weird, for example:
1)
replacing
nodes[0].a = run()
with
double tmp = run();
nodes[0].a = tmp;
does not give segfault anymore.
2)
Reducing the Foo structure size (for example, using only three doubles instead
of four or using two doubles and two ints) does not give segfault.
3)
Decreasing the steps variable does not result in segfault.
4)
Returning 0.0 in the run function does not result in segfault (any non-zero
value still does).
5)
Setting the initial size for v sometimes results in segfault, sometime does.