Я столкнулся со следующей причудливой ошибкой.
У меня есть рабочая область в MSVS2005 всего кода C. Я объявил глобальную переменную в одном файле C. (file1.c) В этом файле есть функция main (), в которой я инициализирую значение этой переменной = 0. В другом файле C (file2.c). Из main есть вызов функции (func1 в file2.c), который устанавливает значение этой глобальной переменной равным 1. В file2.c я объявил глобальную переменную как "extern .." и получил к ней доступ. Но что я заметил, так это то, что в момент основной функции, когда выполнение кода входит в функцию func2, в окне просмотра я вижу, что адрес самой этой глобальной переменной изменяется на совершенно другой адрес (в окне просмотра я наблюдаю & переменная). В результате, когда значение этой переменной установлено в 1, оно записывает значение 1 в совершенно другой адрес памяти. Поэтому, когда позже я использую эту переменную для проверки условия if (if variable == 1), она по-прежнему показывает значение 0 и не удовлетворяет условию if и не принимает этот путь кода, где ожидалось, что он принял этот путь.
Обход:
Я объявил эту переменную в одной из моих существующих глобальных структур, а затем получил доступ к этой переменной для выполнения тех же операций; код работает как положено.
Так что может быть объяснением ошибки, которая вызывает изменение адреса глобальной переменной, если она объявлена как глобальная в некотором C-файле? Не имеет значения, в каком * .c файле я его объявляю и в какой файл я обращаюсь к нему с помощью «extern», результатом является то же самое изменение адреса глобальной переменной и последующая ошибочная операция. Опция оптимизации не включена.
Спасибо
-AD