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

Related posts about c++

Related posts about memory-allocation