Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Выполнение кода и выделение памяти для переменной

Ответить
Настройки темы
C/C++ - Выполнение кода и выделение памяти для переменной

Аватара для Mr666

Пользователь


Сообщения: 59
Благодарности: 2

Профиль | Отправить PM | Цитировать


Привет.

Ниже приведу код иллюстрирующий мой вопрос:

#include <stdio.h>

int main()
{
goto label;
auto int a;
label:
a = -32;
printf("%d\n", a);
}

В результате выполнения программы мы получаем -32, то есть была полноценно использована переменная, код объявления которой при запуске программы выполнится не должен был.

Цитирую из книжки (Программирование на языке СИ) на счёт объявления переменной с классом памяти auto (который я задал явным образом для иллюстрации):

Цитата:
Переменная с классом памяти auto имеет локальное время жизни и видна только в блоке, в котором объявлена. Память для такой переменной выделяется при входе в блок и освобождается при выходе из блока. При повторном входе в блок этой переменной может быть выделен друго участок памяти.
Что-то я не понял как выделилась память для переменной a если код объявления был пропущен с помощью оператора goto?

Отправлено: 14:07, 14-06-2008

 

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Если ставить точку остановки на auto int a; то отладчик останавливается аж на a = -32; со значением а=-858993460 (компилятор в Visual C++2008 Express), а на printf уже с присвоенным -32.
Самое интересное, если вспомнить что return 0; ещё не хватает, но это не так важно для сабжа, и поставить его перед auto int a; выхода не происходит. Это мне напоминает Pascal, в котором отдельным пунктом есть секция var, и которая не выполняется при трассировки, но она указ компилятору.

Последний раз редактировалось Admiral, 14-06-2008 в 15:10.


Отправлено: 14:55, 14-06-2008 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Mr666

Пользователь


Сообщения: 59
Благодарности: 2

Профиль | Отправить PM | Цитировать


Если поставить точку остановки на auto int a; даже без goto:

1 #include <stdio.h>
2
3 int main()
4 {
5 // goto label;
6 auto int a;
7 // label:
8 a = -32;
9 printf("%d\n", a);
10 return 0;
11 }

То при трассировке тоже будет перескакивать на a = -32;

Это уже говорит о том, что auto int a; не является пошаговой инструкцией, например как a = -32;, но чем тогда является auto int a; и где оно записывается если не в пошаговой инструкции?

P.S. Классификатор auto я поставил для декоративной наглядности, что речь идёт именно о таких переменных.

Отправлено: 15:19, 14-06-2008 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Выполнение кода и выделение памяти для переменной

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. NiOl Скриптовые языки администрирования Windows 7 31-01-2019 19:58
выделение памяти (1,8Gb) в win 2000 для приложения запускаемого в cmd impt Microsoft Windows NT/2000/2003 0 31-05-2006 09:03
Выделение процессу определенного количества памяти Alex_Astana Microsoft Windows 2000/XP 0 09-03-2006 09:47
Выполнение произвольного кода Windows Media Player9 mar Защита компьютерных систем 3 24-12-2004 22:18
Динамическо выделение памяти ill Программирование и базы данных 2 04-12-2003 12:56




 
Переход