powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Application made attempt to free the same memory block twice
7 сообщений из 7, страница 1 из 1
Application made attempt to free the same memory block twice
    #39564200
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня. Имеется такой код:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure TRVMarkTextPainter.EnumItemsAdd(RVData: TCustomRVData; ItemNo: integer; var UserData1: integer;
 const UserData2: string; var ContinueEnum: boolean);
var
 s: string;
 pc, pcfound: PChar;
begin
 if RVData.GetItemStyle(ItemNo) < 0 then
  Exit;
 s  := RVData.GetItemText(ItemNo);
 pc := PChar(s);
 pcfound := SearchBuf(pc, System.Length(s), 0, 0, UserData2, [soDown, soWholeWord]);
 while pcfound <> nil do
 begin
  AddRectMark(RVData, ItemNo, pcfound - pc + 1, System.Length(UserData2), TColor(UserData1));
  pcfound := SearchBuf(pcfound + System.Length(UserData2), System.Length(s), 0, 0, UserData2, [soDown, soWholeWord]);
 end;
 ContinueEnum := True;
end;



Периодически валится на первой строке pcfound := SearchBuf с ошибкой попытки двойного разрушения буфера строки: EDoubleFreeError Application made attempt to free the same memory block twice: $1936BA50 STRING [?] 24 bytes. Ошибку находит эврикалог, ошибка в обвязке TRichEdit'а. Код, насколько я знаю, выполняется в дополнительном потоке. Сложно сказать как насчет реентабельности (возможно потоки дерутся между собой), но вроде бы противопоказаний по коду не вижу. Вопросов традиционно два: кто виноват и что делать?
...
Рейтинг: 0 / 0
Application made attempt to free the same memory block twice
    #39564202
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маловероятно, что ошибка на стороне Delphi, но, на всякий случай, версия XE6.
...
Рейтинг: 0 / 0
Application made attempt to free the same memory block twice
    #39564228
DesWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaon,


Попробуй убрать const у UserData2, тогда строка скопируется и будет полностью локальной переменной. Тем более, что это дополнительный поток.
...
Рейтинг: 0 / 0
Application made attempt to free the same memory block twice
    #39564303
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в качестве костылей можно UniqueString попробовать
...
Рейтинг: 0 / 0
Application made attempt to free the same memory block twice
    #39564322
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonкто виноват и что делать?

Я бы очень внимательно смотрел на RVData.GetItemText(), поскольку сдаётся мне, что оно
возвращает какую-то фигню.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Application made attempt to free the same memory block twice
    #39564339
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
const, к сожалению, не могу убрать, потому как это колл-бэк в компоненте. а вот UniqueString попробую, спасибо.
...
Рейтинг: 0 / 0
Application made attempt to free the same memory block twice
    #39564401
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon, включи детект утечек памяти. При включенных утечках у блоков памяти появляется дополнительная инфа. Среди прочего там будет стек предыдущей операции.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Application made attempt to free the same memory block twice
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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