Цитата(Jenya7 @ Aug 10 2017, 16:50)

о спасибо. так работает. проблема в том что функция не работала. адрес вычислялся неправильно.
А вот это странно и тут я бы разобрался. Конечно может быть косяк компилятора, но более вероятно что вы где-то заходите в зону UB (неопределенного поведения).
Скажем обращение по нулевому указателю запрещено
Код
void f(char *addr) {
if (addr) // этот if на высокой оптимизации будет выкинут, так как
doSomething();
*addr = '1'; // эта строка говорит компилятору, что addr точно не 0
}