Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Asker
114 / 102 / 11
Регистрация: 18.12.2010
Сообщений: 378
08.01.2014, 13:01     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #1
Сижу под Linux, использую Code::Blocks, компилятор gcc.

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

Как сделать так, чтобы компилятор ничего не обнулял сам и чтобы ошибки такого рода я находил сразу?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2014, 13:01     Как сделать так, чтобы локальные переменные не обнулялись автоматически?
Посмотрите здесь:

C++ Как сделать так, чтобы данные в прорамму с экрана забивались автоматически?
Как сделать так, чтобы запуск из *.exe не вылетал! C++
как в Code::Blocks просмотреть локальные переменные? C++
Как сделать, чтобы в окне программы при запуске переменные стояли на разных строках? C++
C++ Как сделать так,чтобы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 13:05     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #2
Разве Code::Blocks не выдаёт предупреждения?
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
08.01.2014, 13:05     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #3
Цитата Сообщение от Asker Посмотреть сообщение
Как сделать так, чтобы компилятор ничего не обнулял сам и чтобы ошибки такого рода я находил сразу?
Никак! Локальные переменные - это переменные которые создаются в в памяти которую называют стек или автоматическая память. А стек он после окончания работы функции удаляет все созданные переменные. Хочешь что б не обнулялись создавай переменные в статической или динамической памяти!

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

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

Цитата Сообщение от ninja2 Посмотреть сообщение
Никак!
И что делать тогда? Локальные переменные очень нужны
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
08.01.2014, 13:22     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #5
Цитата Сообщение от Asker Посмотреть сообщение
А это только под Linux или вообще везде?
Разберись какая память бывает! static память создаются глобальные переменные. динамическая выделяется динамически с помощью new и автоматическая которая выделяется для переменных в функциях ну например f(string s) s попадет в автопамять (стек) и удалиться после окончания работы функции. Ты вообще азов не знаешь даже.
Цитата Сообщение от Asker Посмотреть сообщение
И что делать тогда? Локальные переменные очень нужны
Зачем они нужны? Ладно разбирайся. Локальные переменные нужны только на время работы функции, функция окончила свою работу они уже больше не нужны. Нато они и называются локальные, а ты наверно понятия подменяешь не понимая что такое локальная переменная.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 13:24     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #6
Цитата Сообщение от Asker Посмотреть сообщение
В том-то вся и проблема, что ничего не говорит.
Странно.
Миниатюры
Как сделать так, чтобы локальные переменные не обнулялись автоматически?  
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
08.01.2014, 13:25     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #7
компилятор не обнуляет. он ничего не делает. просто в стеке ячейку резервирует. и значение
ее зависит от того, что было в этой ячейке до инициализации. локальные переменные желательно
всегда инициализировать. иногда бывают ворнинги об использовании переменной без инициализации,
но на них лучше не полагаться. за этим нужно самому следить ну или в компиляторе найти
какую-нибудь опцию, которая заставляла бы генерить ошибки в таких случаях. могут так компиляторы
или нет - хз. зависит от компилятора. хотя и ворнинга обычно достаточно. код нужно писать так,
чтобы и ворнингов не было.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 13:28     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #8
Цитата Сообщение от Asker Посмотреть сообщение
И что делать тогда? Локальные переменные очень нужны
Asker, ninja2 совсем о другом говорит, не по теме.

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

Возможно в codeblock есть где то настройки в которых можно это все настраивать...
Asker
114 / 102 / 11
Регистрация: 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; // статическая локальная переменная
    //...
}
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
08.01.2014, 13:36     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #11
Цитата Сообщение от Asker Посмотреть сообщение
Только что я не так сказал?
Все правильно. Молодец! Только глобальная и statiс это одна и таже память. int a попадет туда куда и static int b;
Asker
114 / 102 / 11
Регистрация: 18.12.2010
Сообщений: 378
08.01.2014, 13:38  [ТС]     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #12
У меня ничего не выводит
Миниатюры
Как сделать так, чтобы локальные переменные не обнулялись автоматически?  
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
08.01.2014, 13:40     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #13
Asker, на скрине и лога компиляции нет, видно только запуск.
Asker
114 / 102 / 11
Регистрация: 18.12.2010
Сообщений: 378
08.01.2014, 13:52  [ТС]     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #14
Всем спасибо, я все понял. Не стоит постоянно нажимать кнопку "Build and run"

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

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2014, 14:58     Как сделать так, чтобы локальные переменные не обнулялись автоматически?
Еще ссылки по теме:

Как сделать так, чтобы вернулась часть объекта? C++
C++ Сделать так чтобы матрица заполнялась с клавиатуры, а не автоматически
Сделать так, чтобы функция возвращала как целые, так и дробные значения C++

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

Или воспользуйтесь поиском по форуму:
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

Yandex
Объявления
08.01.2014, 14:58     Как сделать так, чтобы локальные переменные не обнулялись автоматически?
Ответ Создать тему
Опции темы

Текущее время: 03:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru