Re: std::string clobbers memory when compiling without optimizations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 3 Oct 2014, Jonathan Wakely wrote:

On 3 October 2014 11:08, Henrik Mannerström wrote:
Hi,

On 10/03/2014 12:58 PM, Jonathan Wakely wrote:
Have you tried valgrind? Or compiling with GCC's -fstack-protector
option? I can't reproduce the problem, and I think it's pretty
unlikely std::string has that kind of bug without someone noticing
years ago.

I'm not assuming that std::string has a bug (even though the title might
suggest that), I'm just saying that the gdb watchpoint is triggered
inside that function. I tried valgrind memcheck, but I'm no expert, so
suggestions are welcome. Below is the output with stack-protector, what
do you make out of it? Could it be my installation?

- Henrik


$ g++-4.9 -std=gnu++1y mvu.cc  -o mvu
$ ./mvu
Correct diagonal: 1 1 1
Eigen::Matrix<double, 1, 3, 1, 1, 3>
Incorrect diagonal: 1.81749e-316            1            1
$ g++-4.9 -std=gnu++1y -fstack-protector-all mvu.cc  -o mvu
$ ./mvu
Correct diagonal: 1 1 1
Eigen::Matrix<double, 1, 3, 1, 1, 3>
Incorrect diagonal: 1 2 3

I get the same "1 2 3" result using -fstack-protector-all and valgrind.

My guess is that Sigma holds a dangling reference to some temporary
object that has gone out of scope, and the function call t2s
overwrites that stack memory, then when you return to main you go
through the dangling reference.

Are you sure you're using the Eigen types correctly?

He is using "auto" with an expression template library, so I'd say that it is unlikely he is using it correctly, indeed...

--
Marc Glisse




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux