Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

01.12.2012, 15:54. Просмотров 649. Ответов 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++
Скажите, чем отличаются глобальные переменные от статических глобальных переменных?

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

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

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

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

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

12
ValeryS
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,452
01.12.2012, 15:58 #2
структурку бы еще показал

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

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
только работаешь ты с указателями, опасно это
Если помнить о том, что это такое, когда, где, что как сколько выделено и когда удалять,
а также в чём отличие s1=s2 от strcpy(s1, s2),
то абсолютно ничего страшного
0
lost7070
0 / 0 / 0
Регистрация: 25.07.2012
Сообщений: 31
01.12.2012, 17:13  [ТС] #7
Понимаете в чем дело, проблема явно не в том, что возможно не правильно работает функция или неправильные данные поступают в неё.
Если объявить указатель локально в функции обработки нажатия кнопки, то данные присвоятся без деффектов.
Проблема только в том, что при повторном нажатии кнопки данные пропадут, а мне они нужны до конца работы программы.
0
Kuzia domovenok
2119 / 1949 / 192
Регистрация: 25.03.2012
Сообщений: 6,755
Записей в блоге: 1
01.12.2012, 17:19 #8
тебе сколько раз повторить? wcscpy!!!
0
NeonLost
Пес войны
75 / 86 / 3
Регистрация: 23.02.2012
Сообщений: 653
01.12.2012, 17:54 #9
он упорно тебя игнорит...)
1
ValeryS
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,452
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
Пес войны
75 / 86 / 3
Регистрация: 23.02.2012
Сообщений: 653
01.12.2012, 20:47 #11
не вижу утечки, вижу, что один указатель присваевается другому...поправьте...
0
ValeryS
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,452
01.12.2012, 21:23 #12
Цитата Сообщение от NeonLost Посмотреть сообщение
не вижу утечки, вижу, что один указатель присваевается другому
выделяем память
адрес выделенной памяти присваиваем глобальной переменной
нажали на кнопку
еще раз выделим память
адрес выделенной памяти присваиваем глобальной переменной, а тот адрес который был в глобальной переменной затерли, значит память потеряли, поскольку нет указателя ни обратится не удалить
1
NeonLost
Пес войны
75 / 86 / 3
Регистрация: 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
Привет! Вот еще темы с ответами:

Глобальные переменные - C++
Подскажите пожалуйста, почему данные в глобальной переменной перезаписываются, а не плюсуются? Пример: int peremennaya; void...

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

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

Используете ли вы глобальные переменные - C++
Добрый вечер, используете ли вы у себя в коде глобальные переменные между единицами трансляции и/или в конкретной? Моё мнение:...


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

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

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