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

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

Войти
Регистрация
Восстановить пароль
 
lost7070
0 / 0 / 0
Регистрация: 25.07.2012
Сообщений: 31
#1

Глобальные переменные - C++

01.12.2012, 15:54. Просмотров 624. Ответов 12
Метки нет (Все метки)

Доброго времени суток всем.
У меня следующая проблема: объявляю глобально переменную типа структуры
C++
1
dealer* root;
.
Далее в коде обработки нажатия кнопки присваиваю этой переменной некоторое значение:
C++
1
root=deal.create(name_ch, adress_ch, number_ch, el_adress_ch, bye, sale, discount);
Ниже код самой функции, если нужен:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
dealer* dealers::create(wchar_t* name, wchar_t* adress,wchar_t* number,wchar_t* el_adress,int bye,int sale,int discount)
{
    dealer *pv = new dealer;
    pv->name=name;
    pv->adress=adress;
    pv->number=number;
    pv->el_adress=el_adress;
    pv->bye=bye;
    pv->sale=sale;
    pv->discount=discount;
    pv->left=NULL;
    pv->right=NULL;
    return pv;
}
Проблема в том, что переменная никак не изменяется и не реагирует на присвоение.
Подскажите пожалуйста, в чем проблема и как её исправить.
Заранее благодарен всем отозвавшимся.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2012, 15:54     Глобальные переменные
Посмотрите здесь:

Глобальные переменные - C++
Как в C++ завести глобальную (общую для функции и самой программы) переменную?

глобальные переменные - C++
Пробовал объявить глобальные переменные следующим образом: в заголовочном файле head.h #ifndef DF_H #define DF_H //объявления...

Глобальные переменные - C++
Я хочу использовать глобальную переменную, определённую в main, в своих классах. Листинг)) globals.h #ifndef GLOBASL_H #define...

Глобальные переменные - C++
Здравствуйте . Разбираю пример с книги на использование глобальных переменных . Там был такой пример: #include "stdafx.h" #include...

Глобальные переменные - C++
Здравствуйте! Возникла видимо классическая проблема, но перечитав кучу сайтов так ее и не решил. Пишу в VS2005, имеются 2 срр файла...

Глобальные переменные - C++
Я правильно понимаю: "в c++ использовать глобальные переменные не безопасно, т. к. др. программы могут случайно поменять значение этих...

Динамические глобальные переменные - C++
При изучении С++ возникла проблема - потребовалось изменить два объекта одной функцией. Конечно, можно создать новый объект, являющийся...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,738
01.12.2012, 15:58     Глобальные переменные #2
структурку бы еще показал

Добавлено через 34 секунды
Цитата Сообщение от lost7070 Посмотреть сообщение
У меня следующая проблема: объявляю глобально переменную типа структуры
поправочка объявляешь указатель
lost7070
0 / 0 / 0
Регистрация: 25.07.2012
Сообщений: 31
01.12.2012, 16:26  [ТС]     Глобальные переменные #3
Вот сама структура:
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct dealer
{
    wchar_t* name;
    wchar_t* adress;
    wchar_t* number;
    wchar_t* el_adress;
    int bye;
    int sale;
    int discount;
    dealer* left;
    dealer* right;
};
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
01.12.2012, 16:47     Глобальные переменные #4
По-хорошему, под строки надо выделять память и strcpy делать, а числовые поля структуры у тебя тоже не изменяются?
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,738
01.12.2012, 16:51     Глобальные переменные #5
ну вроде все правильно
только работаешь ты с указателями, опасно это

Цитата Сообщение от lost7070 Посмотреть сообщение
root=deal.create(name_ch, adress_ch, number_ch, el_adress_ch, bye, sale, discount);
кто такие
name_ch adress_ch
как ты их создаешь???

поставь брекпоинт на create
и пройди по шагам посмотри как идет присваивание
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
01.12.2012, 17:06     Глобальные переменные #6
Цитата Сообщение от ValeryS Посмотреть сообщение
ну вроде все правильно
Что правильно? Я ещё раз намекну, зачем созданы функции strcpy или, в данном случае, wcscpy, если по мнению автора можно просто поставить =

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
только работаешь ты с указателями, опасно это
Если помнить о том, что это такое, когда, где, что как сколько выделено и когда удалять,
а также в чём отличие s1=s2 от strcpy(s1, s2),
то абсолютно ничего страшного
lost7070
0 / 0 / 0
Регистрация: 25.07.2012
Сообщений: 31
01.12.2012, 17:13  [ТС]     Глобальные переменные #7
Понимаете в чем дело, проблема явно не в том, что возможно не правильно работает функция или неправильные данные поступают в неё.
Если объявить указатель локально в функции обработки нажатия кнопки, то данные присвоятся без деффектов.
Проблема только в том, что при повторном нажатии кнопки данные пропадут, а мне они нужны до конца работы программы.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
01.12.2012, 17:19     Глобальные переменные #8
тебе сколько раз повторить? wcscpy!!!
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
01.12.2012, 17:54     Глобальные переменные #9
он упорно тебя игнорит...)
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,738
01.12.2012, 20:17     Глобальные переменные #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Что правильно?
Цитата Сообщение от lost7070 Посмотреть сообщение
wchar_t* name;
[quote=lost7070;3783718]create(wchar_t* name,[/quo

видишь указатель присваивает указателю
Цитата Сообщение от lost7070 Посмотреть сообщение
pv->name=name;
а уж как он name реализует и кто такой name_ch
Цитата Сообщение от lost7070 Посмотреть сообщение
root=deal.create(name_ch, adress_ch, number_ch, el_adress_ch, bye, sale, discount);
я не знаю, может это указатель на какую нибудь глобальную строку
он же не ответил
Цитата Сообщение от ValeryS Посмотреть сообщение
кто такие
name_ch adress_ch
как ты их создаешь???
Цитата Сообщение от lost7070 Посмотреть сообщение
Проблема только в том, что при повторном нажатии кнопки данные пропадут,
прекрасно мы еще и утечку получили
Цитата Сообщение от lost7070 Посмотреть сообщение
dealer *pv = new dealer;
выделяется новый блок памяти
вот здесь присваивается глобальному
Цитата Сообщение от lost7070 Посмотреть сообщение
root=deal.create(
а старый потеряли
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
01.12.2012, 20:47     Глобальные переменные #11
не вижу утечки, вижу, что один указатель присваевается другому...поправьте...
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,738
01.12.2012, 21:23     Глобальные переменные #12
Цитата Сообщение от NeonLost Посмотреть сообщение
не вижу утечки, вижу, что один указатель присваевается другому
выделяем память
адрес выделенной памяти присваиваем глобальной переменной
нажали на кнопку
еще раз выделим память
адрес выделенной памяти присваиваем глобальной переменной, а тот адрес который был в глобальной переменной затерли, значит память потеряли, поскольку нет указателя ни обратится не удалить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2012, 21:28     Глобальные переменные
Еще ссылки по теме:

глобальные переменные в модуле - C++
Нужно сохранить пару массивов и несколько переменных, но так чтобы их в основной программе видно не было, хочу сделать статик внутри...

Глобальные переменные и константы - C++
Есть проект, большой, с кучей классов и т.д. нужны глобальные переменные, и константы, доступ к которым должны иметь многие классы. Но они...

Глобальные переменные (ошибка) - C++
Разбирался в глобальных переменных, программа выдает ошибку... Что не так? #include <iostream> using namespace std; ...

Убрать глобальные переменные - C++
Помогите пожалуйста убрать глобальные переменные, прога работает на 100% #include <cstring> #include <string> #include <fstream> ...

Глобальные static переменные - C++
main.h class Test { public: void test(); }; static int x; test.cpp


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

Или воспользуйтесь поиском по форуму:
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
01.12.2012, 21:28     Глобальные переменные #13
Цитата Сообщение от ValeryS Посмотреть сообщение
выделяем память
адрес выделенной памяти присваиваем глобальной переменной
нажали на кнопку
еще раз выделим память
адрес выделенной памяти присваиваем глобальной переменной, а тот адрес который был в глобальной переменной затерли, значит память потеряли, поскольку нет указателя ни обратится не удалить
все понял, спасибо...)
Yandex
Объявления
01.12.2012, 21:28     Глобальные переменные
Ответ Создать тему
Опции темы

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