powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа с PWideString
9 сообщений из 9, страница 1 из 1
Работа с PWideString
    #39816247
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понимаю, если мы пишем в PWideChar динамически сформированную строку (а не литерал типа 'фыва'), то нужно выделить ей память, а по окончанию работы почистить память.
У меня вылетает Access Violation при очистке памяти.

делаю так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
var
  PValue: PWideChar;
...
  GetMem(PValue, Length(StrValue));
  PValue := PWideChar(StrValue);
...
  FreeMem(PValue); // <<<---- здесь AV


Что не так делаю?
...
Рейтинг: 0 / 0
Работа с PWideString
    #39816251
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-TalkerЧто не так делаю?
Зачем это?

Что такое "динамически сформированная строка"? В коде нет этого процесса.

В заголовке pwidestring, а в коде pwidechar - что в итоге?

С pwidestring можно работать как с string.
...
Рейтинг: 0 / 0
Работа с PWideString
    #39816256
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

С заголовком промахнулся. Имелось в виду PWideChar

Под "динамически сформированная строка" имелось в виду например результат функции, которая возвращает строку.

Так что, память не нужно очищать?
...
Рейтинг: 0 / 0
Работа с PWideString
    #39816258
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-TalkerТак что, память не нужно очищать?
Нужно, только засада в том, что нужно работать именно с той памятью, которая выделена, а не с той, которая получилась в этой строке:
SQL-Talker
Код: pascal
1.
PValue := PWideChar(StrValue);


Отсюда PValue имеет другое значение. Отладчик в помощь.
...
Рейтинг: 0 / 0
Работа с PWideString
    #39816261
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-TalkerНасколько я понимаю, если мы пишем в PWideChar динамически сформированную строку (а не литерал типа 'фыва'), то нужно выделить ей память, а по окончанию работы почистить память.
У меня вылетает Access Violation при очистке памяти.

делаю так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
var
  PValue: PWideChar;
...
  GetMem(PValue, Length(StrValue));
  PValue := PWideChar(StrValue);
...
  FreeMem(PValue); // <<<---- здесь AV


Что не так делаю?

Начнем с того, что

Код: pascal
1.
GetMem(PValue, Length(StrValue));



выделит в два раза меньше памяти, чем ты ожидаешь
...
Рейтинг: 0 / 0
Работа с PWideString
    #39816262
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-TalkerНасколько я понимаю, если мы пишем в PWideChar динамически сформированную строку (а не литерал типа 'фыва'), то нужно выделить ей память, а по окончанию работы почистить память.
У меня вылетает Access Violation при очистке памяти.

делаю так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
var
  PValue: PWideChar;
...
  GetMem(PValue, Length(StrValue));
  PValue := PWideChar(StrValue);
...
  FreeMem(PValue); // <<<---- здесь AV


Что не так делаю?

идем дальше,

Код: pascal
1.
  PValue := PWideChar(StrValue);

Здесь ты меняешь значение указателя, он теперь указывает на память выделенную под StrValue, разумеется последующий FreeMem дает AV
...
Рейтинг: 0 / 0
Работа с PWideString
    #39816271
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд,

1. Да, лажа тут, нужно GetMem(PValue, Length(StrValue) * 2); т.к. WideChar

2. Как записать StrValue в область памяти на которую указывает PValue ?
...
Рейтинг: 0 / 0
Работа с PWideString
    #39816273
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker2. Как записать StrValue в область памяти на которую указывает PValue ?
Можно использовать Move, но в твоем случае извращаться не нужно, тебе справка дает почти готовый штатный пример


http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/SysUtils_StrNew@PAnsiChar.html]http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/SysUtils_StrNew@PAnsiChar.html
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var
  Temp: PChar;
begin
  // Allocate memory.
  Temp := StrNew(PChar(Edit1.Text));
  Application.MessageBox(Temp, 'StrNew, StrDispose example', MB_OK);
  // Deallocate memory.
  SysUtils.StrDispose(Temp);
...
Рейтинг: 0 / 0
Работа с PWideString
    #39816293
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд,

Заработало. Спасибо большое ))
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа с PWideString
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]