2014-06-28

psilogic: (wpriz)
2014-06-28 09:57 pm

Программерское

Получил "access violation writing location..." Гляжу... все вроде нормально с кодом. Указатели смотрят не на мусор, сам код простой, ошибку сделать негде. Однако почему-то писать не позволяет. При этом проблема только с Release, Debug запускается нормально. И даже сборки на VS2010/2012 запускаются нормально - что в Release, что в Debug.

Бамбук курил долго. Вставлял отладочную пУчать туда и сюда. В ассемблере идет просто запись в адрес памяти, где лежат вполне валидные данные, причем, данные статические (в сегменте данных, а не в heap или стеке, так что это не ошибка распределения памяти и не порча стека). Возникла версия, что данные каким-то образом заносятся в сегмент .radata - там, где компилятор может класть read-only данные программы (константы). Но "больная" access violation-ом переменная совсем не const. Думаю: ну, VS2013 - свежий продукт, может, бага у них, которая проявляется при какой-нибудь оптимизации? Стал дергать опции оптимизации методом тыка - в какой-то момент ВНЕЗАПНО заработало. Стал возвращать их обратно, чтобы выяснить ту самую, которая...

...и тут, блин, натыкаюсь на свой фэйл.

Оказалось, указал не тот путь поиска .lib-ов, и ведет он на каталог, где собраны либы от VS2012. 13-я студия их, ничтоже сумняшеся, берет и юзает, собирая exe-шник с врожденной патологией.