Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632

Разименование указателя

21.08.2012, 05:40. Показов 2930. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть функция get_parametr,котрая в зависимости от переданного параметра,извлекает информацию,сохраняет в объекте string,адрес которого присваивается указателю на void,передаваемого по ссылке.После я передаю парметр и указатель функции,которая разыменовывает указатель и тут всплывает ошибка:необработанное исключение в ....
Указатель в процессе работы программы не равен нулю,то есть указывает на данные,возможно ошибка в том,что указателю присваивается адрес на локальную перменную фунции,которая уничтожается при её завершении и поэтому у меня есть указатель на ничто,но может я ошбаюсь
get_parametr
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
void get_parametr(vector<string> words, size_t position,
    short number, short parametr, void *&data)
{
    switch(number)
    {
    //----------------------------------------------------------
    case 0:
        {
            if(parametr)
            {
                ostringstream phrase;
 
                for(size_t i = position;i < words.size();i++)
                    phrase << words.at(i);
 
                data = &(phrase.str());
 
                return;
            }
            else
            {
                string digit = words.at(position + 1);
                data = &digit;
 
                return;
            }
        }
    //----------------------------------------------------------
 
    //----------------------------------------------------------
    case 1:
        {
            if(!parametr)
            {
                string village = words.at(position);
 
                data = &village;
 
                return;
            }
            else
            {
                string town = words.at(position);
 
                data = &town;
 
                return;
            }
        }
    //----------------------------------------------------------
    }
 
    return;
}

одна из функций,которые используют указатель
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Action::Print(short _param,void *_data)
{
    switch(_param)
    {
    case -1:
        {cout << "Print :" << *((string *)_data) << endl;   return;}
 
    case 0:
        {cout << "Print digit:" << *((int *)_data) << endl; return;}
 
    case 1:
        {cout << "Print phrase:" << *((string *)_data) << endl; return;}
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.08.2012, 05:40
Ответы с готовыми решениями:

Разименование указателей
Прошу вас помочь и объяснить , относительно разадресации указателя. Какие указатели можно разадресовывать? в общем преподаватель...

Вычислить и распечатать сумму элементов массива, используя указатель и метод доступа через разименование
В программе создайте массив из 10 элемента типа float с произвольными числовыми значениями, инициализировать его именем указатель....

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя?
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс) увеличивается на 4 (размер int в...

25
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
21.08.2012, 06:23
Возможно я сейчас скажу глупость, но разве указатели можно передавать по ссылке?
void get_parametr(vector<string> words, size_t position,
short number, short parametr, void *&data)
Оставь просто void *data - будет то же самое.
0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
21.08.2012, 07:01  [ТС]
Цитата Сообщение от nexen Посмотреть сообщение
Оставь просто void *data - будет то же самое.
изначально я так и делал,но указателю ничего не присваивалось
оказывается можно,по крайней мере указатель в функции инициализируется
0
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
21.08.2012, 07:22
alexey31415, напиши, где функцию вызываешь? (Когда указателю ничего не присваивалось)
0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
21.08.2012, 09:40  [ТС]
Цитата Сообщение от nexen Посмотреть сообщение
(Когда указателю ничего не присваивалось)
когда не передаю по ссылке указатель,я отлаживал программу и указатель как был NULL,так и оставался
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
21.08.2012, 09:53
alexey31415, то что ты присваиваешь непонятно чему (void* &data) уничтожается при выходе из функции get_parametr. можно сделать так
C++
1
2
3
4
5
6
7
8
void foo( int* point ) {
    *point = ...;
}
int main(){
    int data;
    foo( &data );
....
}
-=ЮрА=-,
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
21.08.2012, 09:56

Не по теме:

alexey31415, у тебя дата вообще к какому типу потом преобразовываться будет?

Цитата Сообщение от alexey31415 Посмотреть сообщение
phrase.str()
к std::string? Ну так друг, у тебя должен быть либо массив строк string arr[N]; N - заранее должен задать, либо тогда уже пихай свою фразу в vector<string> data, либо делай динамический аллок памяти, выбирай сам. Вобщем в коде вижу работу с невыделенной памятью, а потому кроме краха ничего в этом алгоритме не наблюдаю...



Добавлено через 1 минуту
alexey31415, хочу увидеть увязку функции
Цитата Сообщение от alexey31415 Посмотреть сообщение
void get_parametr(vector<string> words, size_t position,
* * short number, short parametr, void *&data)
и алгоритма её вызывающего, хотябы примитивно покажи как и что пытаешся разбирать на цифры и заносить их в массив...
А лучше напиши задание что должен делать алгоритм, думаю всё можно на много проще сделать, к примеру подключив stringstream и т.д.
0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
21.08.2012, 11:05  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ну так друг, у тебя должен быть либо массив строк string arr[N];
а можно узнать почему?

у меня ИИ игры,который обрабатывает вводимую фразу и на основании её запускает нужную функцию с нужными данными
вот архив с кодом,постарался закомментировать подробно
Вложения
Тип файла: zip Архив ZIP - WinRAR.zip (3.1 Кб, 5 просмотров)
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
21.08.2012, 12:14
Цитата Сообщение от nexen Посмотреть сообщение
Возможно я сейчас скажу глупость, но разве указатели можно передавать по ссылке?
можно а вот ссылки по указателю нельзя
C++
1
2
void foo(T*& a) //допустимо
void foo(T&* a) //недопустимо ибо бред)
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
21.08.2012, 12:38
alexey31415, вобщем т.к. я не знаю задания к проекту то лишь смог подправить и усовершенствовать (на мой взгляд) некоторые моменты
1-е strtok и плюсы - есть stringstream с ним проще бить на токены
C++
1
2
3
stringstream ss(phrase);
    while(ss>>token)
        words.push_back(token);
2-е думаю с передачей указателей ты явно перемудрил, вот так поступил с твоей phrase
C++
1
2
3
4
5
for(size_t i = position;i < words.size();i++)
                phrase += words.at(i) + " ";
            //печатаем фразу
            cout<<phrase<<endl;
            data = (void *)(phrase.c_str());
Ну и в остальном посмотри проект, а лучше напиши задание т.к. я уверен всё можно сделать в несколько раз проще чем сейчас!Проект в аттаче
Вложения
Тип файла: rar Архив ZIP - WinRAR.rar (91 байт, 6 просмотров)
0
21.08.2012, 12:51

Не по теме:

Проект по ходу не приаттачился, поправлюсь...

Вложения
Тип файла: rar New.rar (3.6 Кб, 5 просмотров)
0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
21.08.2012, 13:08  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
думаю с передачей указателей ты явно перемудрил,
я передаю данные функции,я не могу сразу вывести,например,фразу
для этого я пердавал указатель по ссылке и инициализировал его

Добавлено через 8 минут
получается вы всего лишь использовали указатели на char,а не string
я подумывал об этом,но думал,что получится с указателями на string
0
21.08.2012, 13:28

Не по теме:

Цитата Сообщение от alexey31415 Посмотреть сообщение
получается вы всего лишь использовали указатели на char,а не string
я подумывал об этом,но думал,что получится с указателями на string
- какие char на стринг, ты хотя бы увидел что data везде указателем стала?:wall: Ладно не хочешь писать задание - решай сам, я могу помочь лишь тем людям, кто этого хочет...

0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
21.08.2012, 13:42
C++
1
data = &(phrase.str());
Берем адрес временной переменной. Некорректно.
C++
1
2
string digit = words.at(position + 1);
                data = &digit;
digit выходит из области видимости - вызывается деструктор - указатель указывает на удаленный объект. С village и town аналогично.
0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
21.08.2012, 15:17  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
data везде указателем стала
так и было изначально
а про задание я уже писал,что это ИИ игры,который анализирует введённую фразу и запускает нужную функцию
Пример
I:Print me 677
AI:Print 677
0
21.08.2012, 16:08

Не по теме:

Цитата Сообщение от alexey31415 Посмотреть сообщение
Пример
I:Print me 677
AI:Print 677
- ок мне это и надо было!
Если не сложно напиши ещё примеры что вводим что должно выводиться, т.к. у тебя там поход в город, село и т.д. тобишь не совсем понятно что надо ввести чтобы допустим получить Я иду в город и какое назаначение цифр(правда не охота ломать мозг копаясь в алгориме чтобы понять какой ввод какому выводу будет соответсвовать)

0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
21.08.2012, 16:22  [ТС]
я создаю пример с возможностью добавления функций,так как это для игры всё-таки программа
ИИ действует следующим образом:разбиваем строку на слова,ищем для каждого слова айди,по этому айди определяем,какую информацию несёт слово:глаголы-это вызов соответсвующей функции,существительные-параметр для функции.
функция Go имитирует движение в заданную точку,если есть слово town(для примера),то пишем go to the town здесь слово,следуемое за town в вводимой фразе
это я описал функцию Go,Print работает подобным образом
0
21.08.2012, 16:42

Не по теме:

alexey31415, сложноватый выходит лексический разбор, ладно подумаю...

0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
21.08.2012, 17:37  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
сложноватый выходит лексический разбор, ладно подумаю...
да мне собственно нужна была помощь с этим указателем и всё,но всё равно спасибо за помощь
я думаю использовать указатель на структуру,в которой уже будет храниться всевозможная информация для разных функций
0
21.08.2012, 23:21

Не по теме:

Цитата Сообщение от alexey31415 Посмотреть сообщение
да мне собственно нужна была помощь с этим указателем и всё,но всё равно спасибо за помощь
я думаю использовать указатель на структуру,в которой уже будет храниться всевозможная информация для разных функций
- лучше заведи отдельный класс для аргументов. Сейчас я немножко занят поэтому кроме этого линка пока ничем помочь не могу Переменное число аргументов
авось пригодится;)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.08.2012, 23:21
Помогаю со студенческими работами здесь

Создание указателя на экземпляр класса, описанного после объявления указателя
Здравствуйте! Проблема в том, что нужно сделать так: class A{ public: B* b = nullptr; }; class B{ public:

Как сделать функцию от указателя на класс и указателя на метод?
Не получается сделать функцию, параметрами которой являются указатель на класс и на метод. Обращаться к классу нужно именно по указателю,...

Преобразование кода без указателя в код с использованием указателя
Правильно ли выполнил? Исходный код без указателя #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;fstream&gt; using...

Возвращение неконстантного указателя из константного указателя на строку
Не могу до конца понять один момент. Допустим, у нас есть функция searchSymbol, которая принимает два параметра: константный указатель на...

В чём отличие константного указателя и указателя на константу?
int *const p1 и int const* p2 Объясните мне в чём тут отличие.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru