Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
lost7070
0 / 0 / 3
Регистрация: 25.07.2012
Сообщений: 31
#1

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

01.12.2012, 15:54. Просмотров 665. Ответов 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;
}
Проблема в том, что переменная никак не изменяется и не реагирует на присвоение.
Подскажите пожалуйста, в чем проблема и как её исправить.
Заранее благодарен всем отозвавшимся.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2012, 15:54
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Глобальные переменные (C++):

Глобальные и статические глобальные переменные
Скажите, чем отличаются глобальные переменные от статических глобальных...

Глобальные переменные
Здравствуйте, только начал изучать глобальные переменные/разбитие на функции и...

Глобальные переменные
Здравствуйте! Возникла видимо классическая проблема, но перечитав кучу...

глобальные переменные
здравствуйте, я только начал изучать C++, в книге Штидта Г. есть такой код, он...

Глобальные переменные
Видел в некоторых проектах создают глобальные переменные 1 вариант: int...

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

12
ValeryS
Модератор
7134 / 5402 / 669
Регистрация: 14.02.2011
Сообщений: 18,226
01.12.2012, 15:58 #2
структурку бы еще показал

Добавлено через 34 секунды
Цитата Сообщение от lost7070 Посмотреть сообщение
У меня следующая проблема: объявляю глобально переменную типа структуры
поправочка объявляешь указатель
0
lost7070
0 / 0 / 3
Регистрация: 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;
};
0
Kuzia domovenok
2215 / 1984 / 446
Регистрация: 25.03.2012
Сообщений: 6,971
Записей в блоге: 1
01.12.2012, 16:47 #4
По-хорошему, под строки надо выделять память и strcpy делать, а числовые поля структуры у тебя тоже не изменяются?
0
ValeryS
Модератор
7134 / 5402 / 669
Регистрация: 14.02.2011
Сообщений: 18,226
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
и пройди по шагам посмотри как идет присваивание
0
Kuzia domovenok
2215 / 1984 / 446
Регистрация: 25.03.2012
Сообщений: 6,971
Записей в блоге: 1
01.12.2012, 17:06 #6
Цитата Сообщение от ValeryS Посмотреть сообщение
ну вроде все правильно
Что правильно? Я ещё раз намекну, зачем созданы функции strcpy или, в данном случае, wcscpy, если по мнению автора можно просто поставить =

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
только работаешь ты с указателями, опасно это
Если помнить о том, что это такое, когда, где, что как сколько выделено и когда удалять,
а также в чём отличие s1=s2 от strcpy(s1, s2),
то абсолютно ничего страшного
0
lost7070
0 / 0 / 3
Регистрация: 25.07.2012
Сообщений: 31
01.12.2012, 17:13  [ТС] #7
Понимаете в чем дело, проблема явно не в том, что возможно не правильно работает функция или неправильные данные поступают в неё.
Если объявить указатель локально в функции обработки нажатия кнопки, то данные присвоятся без деффектов.
Проблема только в том, что при повторном нажатии кнопки данные пропадут, а мне они нужны до конца работы программы.
0
Kuzia domovenok
2215 / 1984 / 446
Регистрация: 25.03.2012
Сообщений: 6,971
Записей в блоге: 1
01.12.2012, 17:19 #8
тебе сколько раз повторить? wcscpy!!!
0
NeonLost
Пес войны
110 / 87 / 22
Регистрация: 23.02.2012
Сообщений: 653
01.12.2012, 17:54 #9
он упорно тебя игнорит...)
1
ValeryS
Модератор
7134 / 5402 / 669
Регистрация: 14.02.2011
Сообщений: 18,226
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(
а старый потеряли
0
NeonLost
Пес войны
110 / 87 / 22
Регистрация: 23.02.2012
Сообщений: 653
01.12.2012, 20:47 #11
не вижу утечки, вижу, что один указатель присваевается другому...поправьте...
0
ValeryS
Модератор
7134 / 5402 / 669
Регистрация: 14.02.2011
Сообщений: 18,226
01.12.2012, 21:23 #12
Цитата Сообщение от NeonLost Посмотреть сообщение
не вижу утечки, вижу, что один указатель присваевается другому
выделяем память
адрес выделенной памяти присваиваем глобальной переменной
нажали на кнопку
еще раз выделим память
адрес выделенной памяти присваиваем глобальной переменной, а тот адрес который был в глобальной переменной затерли, значит память потеряли, поскольку нет указателя ни обратится не удалить
1
NeonLost
Пес войны
110 / 87 / 22
Регистрация: 23.02.2012
Сообщений: 653
01.12.2012, 21:28 #13
Цитата Сообщение от ValeryS Посмотреть сообщение
выделяем память
адрес выделенной памяти присваиваем глобальной переменной
нажали на кнопку
еще раз выделим память
адрес выделенной памяти присваиваем глобальной переменной, а тот адрес который был в глобальной переменной затерли, значит память потеряли, поскольку нет указателя ни обратится не удалить
все понял, спасибо...)
0
01.12.2012, 21:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2012, 21:28
Привет! Вот еще темы с решениями:

Глобальные переменные
Я хочу использовать глобальную переменную, определённую в main, в своих...

Глобальные переменные
Подскажите пожалуйста, почему данные в глобальной переменной перезаписываются,...

Глобальные переменные
Я правильно понимаю: "в c++ использовать глобальные переменные не безопасно, т....

глобальные переменные
Пробовал объявить глобальные переменные следующим образом: в заголовочном...


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

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

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