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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
#1

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

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

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

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

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

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

Сделать так чтобы матрица заполнялась с клавиатуры, а не автоматически - C++
Нужно сделать так чтобы массив заполнялся с клавиатуры, а не автоматически. #include "stdafx.h" #include "stdio.h" #include...

Как сделать чтобы приложение автоматически запускалось с заданными правами - C++
Здравствуйте. Как сделать чтобы при двойном клике на приложение оно сразу запускалось с заданными правами?

как в Code::Blocks просмотреть локальные переменные? - C++
знаю, что можно, а как - не знаю :( Добавлено через 15 часов 11 минут up...

Как сделать так,чтобы - C++
Собственно,здрасте. Собственно,я новичок в с++. В общем у меня возник вопрос: Сперва приведу пример,иначе не могу объяснить: int...

Можно ли как то сделать, чтобы программа сама создавала необходимые ей переменные, нужного типа? - C++
Привет :) Учу язык С++. Добрался до темы "Указатели". Теперь могу делать так, чтобы пользователь мог сам выбирать размер массива. ...

Как сделать, чтобы в окне программы при запуске переменные стояли на разных строках? - C++
как сделать что бы в окне программы(см. рисунок) при запуске,переменные (x1,y1,z1) и (x2,y2,z2) стояли на разных строках. Вот код...

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

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

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

Цитата Сообщение от 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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 13:24     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #6
Цитата Сообщение от Asker Посмотреть сообщение
В том-то вся и проблема, что ничего не говорит.
Странно.
Миниатюры
Как сделать так, чтобы локальные переменные не обнулялись автоматически?  
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
08.01.2014, 13:25     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #7
компилятор не обнуляет. он ничего не делает. просто в стеке ячейку резервирует. и значение
ее зависит от того, что было в этой ячейке до инициализации. локальные переменные желательно
всегда инициализировать. иногда бывают ворнинги об использовании переменной без инициализации,
но на них лучше не полагаться. за этим нужно самому следить ну или в компиляторе найти
какую-нибудь опцию, которая заставляла бы генерить ошибки в таких случаях. могут так компиляторы
или нет - хз. зависит от компилятора. хотя и ворнинга обычно достаточно. код нужно писать так,
чтобы и ворнингов не было.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 13:28     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #8
Цитата Сообщение от Asker Посмотреть сообщение
И что делать тогда? Локальные переменные очень нужны
Asker, ninja2 совсем о другом говорит, не по теме.

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

Возможно в codeblock есть где то настройки в которых можно это все настраивать...
Asker
115 / 103 / 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
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
08.01.2014, 13:36     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #11
Цитата Сообщение от Asker Посмотреть сообщение
Только что я не так сказал?
Все правильно. Молодец! Только глобальная и statiс это одна и таже память. int a попадет туда куда и static int b;
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
08.01.2014, 13:38  [ТС]     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #12
У меня ничего не выводит
Миниатюры
Как сделать так, чтобы локальные переменные не обнулялись автоматически?  
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
08.01.2014, 13:40     Как сделать так, чтобы локальные переменные не обнулялись автоматически? #13
Asker, на скрине и лога компиляции нет, видно только запуск.
Asker
115 / 103 / 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++
Вопрос следующий. В определенном диапазоне (например от 0 до 9) лежат числа, нужно сделать так, чтобы весь диапазон был выведен на экран,...

Как сделать так, чтобы запуск из *.exe не вылетал! - C++
Из командной строки все работает нормально, но запуск файла *.exe (этот файл я сам создовал, он откомпилированный!) не получается(( Как...

Как сделать так чтобы результат выводился в градусах ? - C++
Нужно что бы результат выводился в градусах, а то он выводит числа типо 0.0000034 и т д Если надо могу написать программу сюда С++

Как сделать так, чтобы вернулась часть объекта? - C++
Поскольку в C++ возможно всё, вот я и решил, может и такое возможно? //Должна возвращаться часть этого объекта, class kl { ...

Как сделать так, чтобы функции были не вложенными? - C++
получается так, что сначала у меня идет функция int main(), потом int sum, и потом int maxx. Они получаются вложенными в int main(). Как...


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

Или воспользуйтесь поиском по форуму:
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     Как сделать так, чтобы локальные переменные не обнулялись автоматически?
Ответ Создать тему
Опции темы

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