-
Undria (25.09.11 02:18) [0]Здравствуйте.
Имеется код, который нормально работает в D2010 и в XE, но не хочет работать в XE2 (выдаёт AV). Все настройки проекта одинаковы для всех трёх версий. Код такой:var
FList: PPointerList;
procedure TForm1.Button1Click(Sender: TObject);
var
pc:pchar;
begin
pc:='Test';
ReAllocMem(FList, 256 * SizeOf(Pointer));
FList^[0] := pc; // тут в XE2 AV выскакивает
ShowMessage(pchar(FList^[0]));
end;
В 2010 и XE работает и в DEBUG и в RELEASE (платформа - Win32). В XE2 - AV в любой конфигурации.
Чего в этом коде не нравится XE2? -
Undria (25.09.11 02:45) [1]В догонку: тестил на Vista SP2 и Win7 SP1 (Ultimate). Всё - Win32 (как и target platform в проекте Delphi XE2).
-
В XE2 TPointerList - динамический массив, поэтому так нельзя
-
var
List: TPointerList;
procedure TForm1.Button1Click(Sender: TObject);
var
pc: PChar;
begin
pc := 'Test';
SetLength(List, 256);
List[0] := PChar(pc);
ShowMessage(PChar(List[0]));
end; -
Undria (28.09.11 02:04) [4]Вот что значит работать на чужом компе, где стоят какие-то мутные триалы без исходников и хелпа, + в Инет нет возможности залезть..
Код DVM пришлось немного изменить, но теперь всё работает.
Спасибо!