Remove never-run call to templated function, get allocation error on run-time
Posted
by Narfanator
on Stack Overflow
See other posts from Stack Overflow
or by Narfanator
Published on 2010-04-26T21:11:33Z
Indexed on
2010/04/26
21:13 UTC
Read the original article
Hit count: 237
First off, I'm a bit at a loss as to how to ask this question. So I'm going to try throwing lots of information at the problem.
Ok, so, I went to completely redesign my test project for my experimental core library thingy. I use a lot of template shenanigans in the library. When I removed the "user" code, the tests gave me a memory allocation error. After quite a bit of experimenting, I narrowed it down to this bit of code (out of a couple hundred lines):
void VOODOO(components::switchBoard &board){ board.addComponent<using_allegro::keyInputs<'w'> >(); }
Fundementally, what's weirding me out is that it appears that the act of compiling this function (and the template function it then uses, and the template functions those then use...), makes this bug not appear. This code is not being run. Similar code (the same, but for different key vals) occurs elsewhere, but is within Boost TDD code.
I realize I certainly haven't given enough information for you to solve it for me; I tried, but it more-or-less spirals into most of the code base. I think I'm most looking for "here's what the problem could be", "here's where to look", etc. There's something that's happening during compile because of this line, but I don't know enough about that step to begin looking.
Sooo, how can a (presumably) compilied, but never actually run, bit of templated code, when removed, cause another part of code to fail?
Error:
Unhandled exceptionat 0x6fe731ea (msvcr90d.dll) in Switchboard.exe:
0xC0000005: Access violation reading location 0xcdcdcdc1.
Callstack: operator delete(void * pUser Data) allocator< class name related to key inputs callbacks >::deallocate vector< same class >::_Insert_n(...) vector< " " >::insert(...) vector<" ">::push_back(...)
It looks like maybe the vector isn't valid, because _MyFirst
and similar data members are showing values of 0xcdcdcdcd
in the debugger. But the vector is a member variable...
© Stack Overflow or respective owner