170 похожих чатов

Кто-То сталкивался с тем, что на винде std::string несовместима между

дебажной и релизной сборкой?Например, релизный exe загружает дебажнуюю длл, получает из нее std::string, а она битая.

Я полистал исходники - не вижу ifdef, который мог бы такое делать, но там многие тысячи строк кода и шаблон на шаблоне.

18 ответов

22 просмотра

Известный факт, что дебажные и релизные std классы в MSVC бинарно несовместимы в большинстве своём

Alex- Автор вопроса
Alexander Karaev
Известный факт, что дебажные и релизные std классы...

Это очень коварно, а нет дефайна, который этим управляет?

Просто принять и не делать так

Вообще-то совместима, но тут проблема в том что если у тебя в одном приложении используется одновременно и отладочная версия стандартной библиотеки и релизная, то это нарушение One definition rule и программа автоматом некорректна

Alex- Автор вопроса
Ilya Zviagin
Вообще-то совместима, но тут проблема в том что ес...

Не уверен, что это так работает, определения в разных exe / dll независимы. А строка вообще шаблонная.

Alex
Это очень коварно, а нет дефайна, который этим упр...

Очень коварно нарушать одт и мешать две стандартные библиотеки...

Alex
Не уверен, что это так работает, определения в раз...

А я уверен что это работает именно так и тебя могу заверить что это работает именно так

Alex
Не уверен, что это так работает, определения в раз...

Шаблонная строка или нет Это неважно, она по стандарту языка должна быть во всей программе определена единственным образом а если это не так то это неопределённое поведение. Определение в разных exe и dll могут быть независимыми но в рамках одного приложения Они обязаны быть одинаковыми. Иначе будет неопределённое поведение на которое ты и наталкиваешься и оно тебе дают по зубам Ну и поделом!

Alex- Автор вопроса
Ilya Zviagin
Шаблонная строка или нет Это неважно, она по станд...

Да, только причина не в нарушении ODR, а в разном ABI

Alex- Автор вопроса
Ilya Zviagin
Шаблонная строка или нет Это неважно, она по станд...

Единственным образом, но не один раз. ODR ни при чем.

Alex
Единственным образом, но не один раз. ODR ни при ч...

Дорогой это оно и есть, ODR, не единственным образом, а тупо одинаково

Alex
Единственным образом, но не один раз. ODR ни при ч...

Так-то, просто хочу напомнить, ты любой объект или тип программы на c++ или C и так в каждой единице трансляции определяешь заново, то есть ни в одной программе на си или си плюс плюс правила определения чего-то ровно один раз и не больше не может быть потому что у нас есть многофайловая сборка, раздельная трансляция

Alex- Автор вопроса
Ilya Zviagin
Так-то, просто хочу напомнить, ты любой объект или...

много раз можно только с internal linkage, а иначе - только один раз на весь бинарник, а не один раз на TU.

Alex
Единственным образом, но не один раз. ODR ни при ч...

Давай лучше перейдём к практическую плоскость и решим твою проблему а решение должно быть в том что ты должен собирать всю свою программу либо в режиме сборки релиз либо в режиме сборки дебаг либо ещё как-то но всегда одинаково всю программу целиком со всеми библиотеками со всеми модулями бинарными

Ты не прав, ты путаешь помещение объектов в словарь глобальных ссылок с определением объектов и типов программы. Это разные вещи. И даже более, то о чём ты говоришь оно диагностируемо по большей части То есть ты получишь в случае нарушения ошибку не всегда но там скажем 80% случаев А вот нарушение одр наоборот почти никогда не диагностируемо

Там итераторы на дебаге другие

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта