Это сводит меня с ума. Я использую какой-то сторонний код в Windows .lib, который в режиме отладки вызывает ошибку, подобную следующей:
Run-Time Check Failure #2 - Stack around the variable 'foo' was corrupted.
Ошибка выдается, когда объект выходит из области видимости или удаляется. Простое выделение одного из этих объектов и последующее удаление приведет к ошибке. Поэтому я думаю, что проблема либо в одном из множества конструкторов / деструкторов, но, несмотря на то, что я перебираю все строки кода, я не могу найти проблему.
Однако это происходит только при создании одного из этих объектов в статической библиотеке. Если я создаю его в своем приложении EXE, ошибка не появляется. Сам сторонний код живет в статической библиотеке. Например, это не удается:
**3RDPARTY.LIB**
class Foo : public Base
{
...
};
**MY.LIB**
void Test()
{
Foo* foo = new Foo;
delete foo; // CRASH!
}
**MY.EXE**
void Func()
{
Test();
}
Но это будет работать:
**3RDPARTY.LIB**
class Foo : public Base
{
...
};
**MY.EXE**
void Func()
{
Foo* foo = new Foo;
delete foo; // NO ERROR
}
Итак, вырезание «среднего» файла .lib устраняет проблему, и именно эта странность сводит меня с ума. EXE и 2 библиотеки используют одну и ту же библиотеку CRT. Нет ошибок при связывании. Сторонний код использует наследование и существует 5 базовых классов. Я закомментировал столько кода, сколько смогу, пока все еще готовил его, и я просто не вижу, что случилось.
Так что, если кто-нибудь знает, почему код в .lib будет работать по-разному с тем же кодом в .exe, я хотел бы услышать это. Так же любые советы по отслеживанию памяти перезаписывают! Я использую Visual Studio 2008.