Пойдем простым логическим путем, с отделением мух и котлет. 1. Во первых - раз у тебя там мусор, значит ты намусорил. Ищите и обрящете. Неправильные операции с указателями и пр.
2. Если добавление static все кардинально меняет, значит в данном месте происходит одноразовая инициализация переменной, и ей присваивается правильное значение, еще до того как ты успел намусорить. Хотя - у тебя там не инициализация, а присвоение. Но компилятор по какой-то причине считает, что можно инициализировать 1 раз (Этом момент можно прояснить дизассемблером). Если и есть претензии к компилятору - то только в этом месте.
Такой вот вид сбоку.