Вот видео https://www.youtube.com/watch?v=c91zzMAaAlo () видео удалено
const char firstSymbolPosIn7bit = UHDL + 1 + 1;
// first +1 - for UHDL field
// other +1 for specify the position of the first letter.
const char firtSymbolFillers = std::abs(8 - firstSymbolPosIn7bit);
if (UHDI_present && firtSymbolFillers) {
unsigned char firstSymbol;
HexToBin(&payloadText[1], &firstSymbol, 2);
//↑ this call change const firtSymbolFillers
Есть переменная firtSymbolFillers, локальная, константная, её время жизни видно в видео, как и то что она никак не связана с вызовом ф-ии HexToBin, после которого значение локальной константной переменной меняется.
Есть ли у кого-то догадки из-за чего такое может происходить?
Ну т.е. может ли быть сам исходных код виной такому поведению, или же это какой-то глубинный косяк рантайма от Борланда(Эмбаркадеро)?
И да, все оптимизации в настройках проекта отключены. И это не ошибка в дебагер-прослойке, если запускать не в дебаг режиме, то судя по логам - именно все так и есть, константная переменная меняет своё значение.
Обойти такое, чтобы заставить программу делать то что нужно, можно введя между нужной константой переменной и иф блоком откуда вызывается HexToBin - еще одну переменную затычку - тогда firtSymbolFillers не поменяется. Ну или просто использовать ниже в коде то же выражение, что первично инициировало firtSymbolFillers.
Но блин что за эффект такой? У меня вертится мысли что допустим как-то в коде с индексами массивов (строк) где-то есть ошибка. Но это очень вряд ли, т.к. в ф-ии используются AnsiString - а это vcl строка (Дельфийская, от Си++ к ней только биндинги) - так вот у AnsiString-ов на каждое образение к индексам обязательная проверка валидности индекса, и бросает исключение если что-то не то, так что вряд ли бы я забрел в другой индекс в стеке.. Да и если бы забрел - разве это бы как-то могло повлиять на изменение константной переменной?