У меня есть код, который течет в Windows.Он отлично работает на многих платформах Unix, и утечка происходит только в Windows.Бинарный файл состоит из exe, 1 dll и 2 статических библиотек.Exe связывается как с DLL, так и со статическими библиотеками, в то время как статические библиотеки также связываются с DLL.Утечка происходит в исполняемом коде, когда вместо вызова деструктора удаления вектора по какой-то причине вызывается скалярный деструктор удаления.Это приводит к удалению только первого объекта в массиве, в то время как остальная часть массива остается в памяти.
Вытекающий псевдокод выглядит следующим образом:
class MyClassFromExe : public MyBaseClassFromDll {
public:
ClassFromDll* m_arr;
MyClassFromExe(unsigned int size)
{
m_arr = new ClassFromDll[size];
}
~MyClassFromExe()
{
delete [] m_arr;
}
};
void func()
{
MyClassFromExe obj(3);
}
When func () завершается и вызывается деструктор. Я вижу, что вызывается только деструктор первого объекта в m_arr.Из отладчика я вижу, что это делается из скалярного деструктора удаления, а не из деструктора удаления вектора.Это объясняет, почему уничтожен только первый объект.Что мне нужно понять, так это то, почему скалярный деструктор удаления вызывается при использовании delete [] ???
Я нашел этот поток - Почему деструктор удаления вектора вызывается в результате скалярного удаления?.Я следовал предложениям и убедился, что все модули скомпилированы с /MD.
Важно отметить, что когда dll, которая содержит ClassFromDll, была статической библиотекой, а не dll, все работало нормально.Утечка началась только тогда, когда статическая библиотека была изменена на dll.В то время как программа просачивается в режим Release, она вылетает в режиме Debug при delete [] m_arr.Сбой происходит в строке 52 dbgdel.cpp - _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse).
На платформах Unix эта библиотека также является общей библиотекой, и, как ожидается, там вызывается деструктор удаления векторов, и утечки нет.Может ли быть проблема с компилятором VC?Или, может быть, нужно изменить некоторые другие настройки проектов?Я пользуюсь VC2003.
Заранее спасибо!