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

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

Восстановить пароль Регистрация
 
lost7070
0 / 0 / 0
Регистрация: 25.07.2012
Сообщений: 31
01.12.2012, 15:54     Глобальные переменные #1
Доброго времени суток всем.
У меня следующая проблема: объявляю глобально переменную типа структуры
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++ глобальные переменные
Глобальные и статические глобальные переменные C++
Глобальные переменные C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
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
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.12.2012, 16:47     Глобальные переменные #4
По-хорошему, под строки надо выделять память и strcpy делать, а числовые поля структуры у тебя тоже не изменяются?
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
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
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 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
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.12.2012, 17:19     Глобальные переменные #8
тебе сколько раз повторить? wcscpy!!!
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
01.12.2012, 17:54     Глобальные переменные #9
он упорно тебя игнорит...)
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
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
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
01.12.2012, 20:47     Глобальные переменные #11
не вижу утечки, вижу, что один указатель присваевается другому...поправьте...
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
01.12.2012, 21:23     Глобальные переменные #12
Цитата Сообщение от NeonLost Посмотреть сообщение
не вижу утечки, вижу, что один указатель присваевается другому
выделяем память
адрес выделенной памяти присваиваем глобальной переменной
нажали на кнопку
еще раз выделим память
адрес выделенной памяти присваиваем глобальной переменной, а тот адрес который был в глобальной переменной затерли, значит память потеряли, поскольку нет указателя ни обратится не удалить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2012, 21:28     Глобальные переменные
Еще ссылки по теме:

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

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

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

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