Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
119 / 107 / 29
Регистрация: 18.12.2010
Сообщений: 378
1

Как сделать так, чтобы локальные переменные не обнулялись автоматически?

08.01.2014, 13:01. Просмотров 1989. Ответов 15
Метки нет (Все метки)

Сижу под Linux, использую Code::Blocks, компилятор gcc.

Я заметил одну неприятную вещь: когда я где-то забываю что-то обнулить, инициализировать какую-нибудь локальную переменную, компилятор, похоже, делает это за меня. Потом когда мой код запускают на другой реализации, все недочеты с инициализацией сразу проявляются в полной мере.

Как сделать так, чтобы компилятор ничего не обнулял сам и чтобы ошибки такого рода я находил сразу?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2014, 13:01
Ответы с готовыми решениями:

Как сделать так чтобы поле цена указывалась автоматически???
Уважаемые форумчане! Помогите пожалуйста, 4 года мучился, и с час вновь мучаюсь с этой...

Как сделать так, чтобы значения выводили автоматически, а не вручную?
есть решенная задача, но нужно, чтобы элементы массива выводились автоматически( рандомно ). Как...

Как сделать так чтобы подвал сайта автоматически съезжал вниз
Как сделать так,чтобы подвал сайт уезжал вниз при увеличении содержимого основного сайта? ...

Как сделать так, чтобы сервер автоматически перезагружался раз в 12 часов?
Имею WINDOWS SERVER 2012R2, подскажите как сделать так, чтобы сервер автоматически перезагружался...

15
5478 / 4873 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 13:05 2
Разве Code::Blocks не выдаёт предупреждения?
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,039
08.01.2014, 13:05 3
Цитата Сообщение от Asker Посмотреть сообщение
Как сделать так, чтобы компилятор ничего не обнулял сам и чтобы ошибки такого рода я находил сразу?
Никак! Локальные переменные - это переменные которые создаются в в памяти которую называют стек или автоматическая память. А стек он после окончания работы функции удаляет все созданные переменные. Хочешь что б не обнулялись создавай переменные в статической или динамической памяти!

Смысла нету локальным переменным не удаляться когда локальный код закончил работу?
0
119 / 107 / 29
Регистрация: 18.12.2010
Сообщений: 378
08.01.2014, 13:14  [ТС] 4
Цитата Сообщение от alsav22 Посмотреть сообщение
Разве Code::Blocks не выдаёт предупреждения?
В том-то вся и проблема, что ничего не говорит.

Цитата Сообщение от ninja2 Посмотреть сообщение
А стек он после окончания работы функции удаляет все созданные переменные.
А это только под Linux или вообще везде?

Цитата Сообщение от ninja2 Посмотреть сообщение
Никак!
И что делать тогда? Локальные переменные очень нужны
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,039
08.01.2014, 13:22 5
Цитата Сообщение от Asker Посмотреть сообщение
А это только под Linux или вообще везде?
Разберись какая память бывает! static память создаются глобальные переменные. динамическая выделяется динамически с помощью new и автоматическая которая выделяется для переменных в функциях ну например f(string s) s попадет в автопамять (стек) и удалиться после окончания работы функции. Ты вообще азов не знаешь даже.
Цитата Сообщение от Asker Посмотреть сообщение
И что делать тогда? Локальные переменные очень нужны
Зачем они нужны? Ладно разбирайся. Локальные переменные нужны только на время работы функции, функция окончила свою работу они уже больше не нужны. Нато они и называются локальные, а ты наверно понятия подменяешь не понимая что такое локальная переменная.
1
5478 / 4873 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 13:24 6
Цитата Сообщение от Asker Посмотреть сообщение
В том-то вся и проблема, что ничего не говорит.
Странно.
0
Миниатюры
Как сделать так, чтобы локальные переменные не обнулялись автоматически?  
DU
1492 / 1138 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
08.01.2014, 13:25 7
компилятор не обнуляет. он ничего не делает. просто в стеке ячейку резервирует. и значение
ее зависит от того, что было в этой ячейке до инициализации. локальные переменные желательно
всегда инициализировать. иногда бывают ворнинги об использовании переменной без инициализации,
но на них лучше не полагаться. за этим нужно самому следить ну или в компиляторе найти
какую-нибудь опцию, которая заставляла бы генерить ошибки в таких случаях. могут так компиляторы
или нет - хз. зависит от компилятора. хотя и ворнинга обычно достаточно. код нужно писать так,
чтобы и ворнингов не было.
0
5478 / 4873 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 13:28 8
Цитата Сообщение от Asker Посмотреть сообщение
И что делать тогда? Локальные переменные очень нужны
Asker, ninja2 совсем о другом говорит, не по теме.

Добавлено через 1 минуту
ninja2, проснись:
Цитата Сообщение от Asker Посмотреть сообщение
когда я где-то забываю что-то обнулить, инициализировать какую-нибудь локальную переменную, компилятор, похоже, делает это за меня.
Добавлено через 56 секунд
Тема о том, что некоторые компиляторы (gcc) сами инициализируют неинициализированные переменные.
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,039
08.01.2014, 13:33 9
Что делать что делать? Самому нужно инициализировать, мой компилятор если напишешь int a; и запустишь программу, то выкинет предупреждение, а когда будет исполняться прога, то сразу вылет, приходится всегда инициализировать int a(0);

Возможно в codeblock есть где то настройки в которых можно это все настраивать...
0
119 / 107 / 29
Регистрация: 18.12.2010
Сообщений: 378
08.01.2014, 13:33  [ТС] 10
Спасибо!


Цитата Сообщение от ninja2 Посмотреть сообщение
а ты наверно понятия подменяешь не понимая что такое локальная переменная.
Только что я не так сказал?
C++
1
2
3
4
5
6
7
8
...
int a; // глобальная
int main()
{
    int t; // локальная
    static int b; // статическая локальная переменная
    //...
}
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,039
08.01.2014, 13:36 11
Цитата Сообщение от Asker Посмотреть сообщение
Только что я не так сказал?
Все правильно. Молодец! Только глобальная и statiс это одна и таже память. int a попадет туда куда и static int b;
0
119 / 107 / 29
Регистрация: 18.12.2010
Сообщений: 378
08.01.2014, 13:38  [ТС] 12
У меня ничего не выводит
0
Миниатюры
Как сделать так, чтобы локальные переменные не обнулялись автоматически?  
3239 / 2047 / 350
Регистрация: 24.11.2012
Сообщений: 4,897
08.01.2014, 13:40 13
Asker, на скрине и лога компиляции нет, видно только запуск.
1
119 / 107 / 29
Регистрация: 18.12.2010
Сообщений: 378
08.01.2014, 13:52  [ТС] 14
Всем спасибо, я все понял. Не стоит постоянно нажимать кнопку "Build and run"

Перебилдил, warning появился
0
fasked
08.01.2014, 14:15
  #15

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Тема о том, что некоторые компиляторы (gcc) сами инициализируют неинициализированные переменные.
Так часто делают при сборке в режиме отладки - записывают некоторые магические значения , чтобы проще было замечать реальные неинициализированные данные.

1
alsav22
08.01.2014, 14:58     Как сделать так, чтобы локальные переменные не обнулялись автоматически?
  #16

Не по теме:

Если бы только магические значения. Вот такой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
using namespace std;
 
int  main()
{
    void* v;
    string* s;
    char* c;
    std::cout<<v<<std::endl
        <<(void*)s<<std::endl
        <<(void*)c<<std::endl;
    return 0;
}
в Debug (mingv) выдаст:
0
0
0x7efde000
А в Release:
0
0
0

1
08.01.2014, 14:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2014, 14:58
Привет! Вот еще темы с ответами:

Как сделать так чтобы автоматически слова выстроились в одну строчку
Здравствуйте, уважаемые форумчане. Подскажите пожалуйста как решить мою проблему. Перевернул книгу...

Как сделать так, чтобы Лазарус автоматически добавлял пробел перед ':=' ?
При наборе свойства какого-нибудь объекта или просто известной процедуры CodeCompletion предлагает...

Как сделать так, чтобы данные в прорамму с экрана забивались автоматически?
Друзья! Вопрос сложный, конечно. Я даже не знаю, с чего начать. (Может, даже не тот раздел) Прошу...

Как сделать так, чтобы в форме автоматически отоброжались записи по дате?
Спасибо!

Как сделать так, чтобы файл с флешки открывался автоматически после её подключения?
Как сделать чтобы файл с флешки открывался автоматически после подключения?

Как сделать так, чтобы мобильное приложение автоматически подстраивалось под размер экрана?
В Android Studio мы же под определенную диагональ создаём приложение (один эмулятор).. Как при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.