![]() |
|
![]() ![]() ![]() |
|
Kirgston |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: 2 Всего: 2 |
Всем доброго времени суток! Возник такой вот вопросик... собственно как я могу получить доступ через указатель? На Вижуале писал так например:
*(dictonary+tmp) в итоге получал какбы dictonary[tmp]. Ну то есть доступ =) А в РАДе когда пишу нечто подобное...
во время трассировки я вижу что в указателе (ну точнее в переменной на которую указывает указатель) dic есть текст. Что , tmp = dic->Pos(enc[i])-zsyv; while (tmp < 1) tmp += dic->Length(); прекрасно работают. Но когда я пытаюсь добавить к dec добавить буквочку из dic то почему то 0 реакции... уже пробовал и через dec.Insert() - абсолютно 0 реакции. То есть какбы... dec попросту пуст... и никакие данные в него не попадали оО Спасибо! |
|||
|
||||
Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Итак: dec - это объект UnicodeString dic - это указатель на объект UnicodeString; tmp - это некое число Вы прибавляете к объекту dec некий объект по адресу dic+tmp. Не букву! Надо тогда уж так: dec += (*dic)[Tmp]; Круглые скобки может и не нужны, к стыду своему постоянно забываю приритеты операций индексирования и разыменования указателя. Добавлено через 2 минуты и 7 секунд Кстати, если вы объявите локальные переменные в таком порядке, то скорее всего получите AV
|
||||
|
|||||
Kirgston |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: 2 Всего: 2 |
Простите а что это? ![]() Да так и есть... только интересно то что в Вижуале оно то всё нормально оО . То есть да там была переменная типа char... но вроде принцип тот же... хотя думаю щас что такое сработает только с чаром =) Просто в книге читал что именно *(dic+tmp) надо делать... ааа ну да... если не ошибаюсь то 1 переменная типа чар = 1 байт. И скажем dic+tmp указывает на начало масива со сдвигом в тмп байт а какраз и выходит какбудто это размерность =) а потом мы это всё разыменовываем и получаем прямой доступ =). А если делать это с Unicode\Ansi String то это уже не катит ибо там уже по другому идет размерность. Я правильно всё понял?
Какраз таки и нужны =) [BCC32 Error] Unit1.cpp(62): E2093 'operator*' not implemented in type 'UnicodeString' for arguments of the same type Full parser context Unit1.cpp(47): parsing: void _fastcall TForm1::Button2Click(TObject *) Вот что мне иначе начинает орать =) А в вашем примере dec += (*dic)[Tmp]; Выходит какбудто... мы разыменовываем указатель аля (*dic) аналогично dictonary (указатель указывает на ету переменную) и тогда уже указываем по индексу тмп. Я всё правильно понял? Спасибо! |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Сокращение от Access violation - нарушение доступа к памяти
Не в размерности дело, а в типе переменных. Если переменная - адрес, например: char *Str; то синтаксис Str[6] аналогичен *(Str + 6) В Вашем случае: UnicodeString dictonary,*dic dic указывает на единственный объект. Нет там никакого массива и при попытке прибавить к указателю число - он смещается на tmp объектов, которых реально нет - т.е. указывает на случайный адрес. В общем почитайте про математические операции с указателями, массивы и т.п. |
|||
|
||||
Kirgston |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: 2 Всего: 2 |
Аааа спасибки =) просто в етих сокращениях ещё не сильно разбераюсь ![]() Да вот какраз и читал))))) только там дальше типа char не заходило... потому... какбы они написали так что якобы это и ко всем остальным типам относится. Спасибо большое! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |