У меня были большие проблемы с воспроизведением и обнаружением причины ошибки. Вступление кажется совершенно случайным, поэтому я где-то подозревал, что неинициализированная переменная. Но потом я нашел этот кусок кода:Может ли это вызвать неопределенное поведение?
CMyClass obj; // A
obj.DoStuff();
if (somebool)
{
CMyClass obj; // B
obj.DoStuff();
}
obj.DoOtherStuff();
Кажется, как будто DoOtherStuff() либо делается на «B», или что B.DoStuff() иногда на самом деле работает на A - то есть я DoStuff() является фактически вызвал первый объект.
Это могло случиться? Я не думаю, что у меня появилось предупреждение о компиляторе (теперь я исправил код, надеясь, что это может помочь). Похоже, очень, вероятно, что эта часть фактического кода - вот где ошибка, которую я пытаюсь найти, но, конечно, могут быть другие причины, которые я еще не обнаружил.
Да, два экземпляра предназначались. – Srekel
Интересно. Решение дать им одно и то же имя является подозрительным. Конечно, не видя логики, я понятия не имею, почему автор решил сделать это именно так. Переименовали ли они свои проблемы? –
Я сомневаюсь, что их назвали то же самое было чем-то большим, чем «ошибка» для копирования-вставки. Я еще не тестировал код, поэтому не уверен, что он работает. – Srekel