У меня есть программа, передающая список stl в dll, когда оба модуля находятся в режиме отладки, все работает нормально. Когда вы меняете dll в режим деблокирования, передача не работает. Я проверил список в главном приложении (версия отладки) и рассмотрел размер списка, равный 16 байтам, сразу же в dll, который я рассмотрел, размер списка теперь изменяется на 12 байтов. и все в списке ошибочно интерпретируются. Я проверил вариант компилятора и сомневался в выравнивании структуры, но не понял. Кто-нибудь может дать мне какие-то намеки? Большое спасибо.vs2010 debug vs release: почему stl-список интерпретируется неправильно
проходя структуру:
class data
{
int
int
char*
double
}
class datalist
{
int
int
int
list<data> list1
list<data> list2
};
прохождение механизм:
fun(const datalist& dl)
* Дополнительные пояснения:
main app (debug) + dll (debug): work fine
main app (release) + dll (release): does not work
main app (debug) +dll (release): does not work
оба модуля собраны с тем же компилятор VS2010 *
Некоторый код, пожалуйста! Вопрос очень широкий и абстрактный в противном случае! – Christophe
Вы не можете смешивать и сопоставлять код с итератором debugging en/disabled. –
Спасибо, Ханс. На самом деле это правильный ответ. Может ли кто-то продвигать это как ответ. Добавьте _Iterator_Debugger = 0 в определение препроцессора и перестройте основное приложение, и проблема будет решена. Причина в том, что сборка отладки разрешает эту опцию, а контейнер stl содержит некоторые дополнительные элементы данных, что делает эти два модуля несоответствием. – shangping