Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.31;
Скачать: CL | DM;

Вниз

Invalid pointer operation...   Найти похожие ветки 

 
istok20 ©   (2009-12-07 23:16) [0]

В данном коде иногда возникает Invalid pointer operation, проблема в том, что я не знаю, при каком параметре AStr это происходит. Другие параметры проблемы обозначены ниже:


...
   FUrl: array[1..255] of Char;
...
procedure StrToArray(var arStr: array of Char; AStr: string);
var
len: integer;
begin
FillCHar(arStr, Length(arStr), 0);
len := length(AStr);
if len >= Length(arStr) then len := Length(arStr) -1;
if len = 0 then exit;
Move(AStr[1], arStr, len);//<-- Invalid pointer operation
end;
...
StrToArray(FUrl, MyString) //вызов процедуры, значение MyString неизвестно..


Возможно, сможете сходу сказать в чем ошибка и как пофиксить..  Я думал что возникает при AStr="", т.к. идет обращение к AStr[1], но это исключение при этом условии пока не воспроизводится..

Спасибо.


 
istok20 ©   (2009-12-07 23:27) [1]

ой, т.е. при AStr="" оно не то что не воспроизводится, а срабатывает if len = 0 then exit;


 
KilkennyCat ©   (2009-12-07 23:34) [2]

массив точно с 1 должен начинаться? или все-таки с 0?


 
istok20 ©   (2009-12-07 23:36) [3]

массив специально с 1, чтоб также как и string было..


 
Eraser ©   (2009-12-07 23:37) [4]

> [0] istok20 ©   (07.12.09 23:16)

вообще код опасный это первое, во-вторых, не совместим с юникодом.


> Move(AStr[1], arStr, len);//<-- Invalid pointer operation


var
 A: TCharArray;
 S: string;
begin
 S := "Test";
 SetLength(A, Length(S));
 Move(Pointer(S)^, A[0], Length(S) * SizeOf(Char));


 
KilkennyCat ©   (2009-12-07 23:39) [5]

а какой тип должен быть у операндов move?


 
Юрий Зотов ©   (2009-12-08 00:02) [6]

А зачем вообще строку пребразовывать в массив символов, если она сама по себе уже и есть готовый массив символов?


 
Anatoly Podgoretsky ©   (2009-12-08 00:04) [7]

> Юрий Зотов  (08.12.2009 00:02:06)  [6]

Учебное задание


 
Германн ©   (2009-12-08 02:45) [8]


> Move(AStr[1], arStr, len);

Всегда стараюсь избегать в таких функциях давать в качестве параметра имя массива (arStr). Предпочитаю всегда давать "адрес начала массива" arStr[].


 
icWasya ©   (2009-12-08 17:52) [9]

FillCHar(arStr[0], Length(arStr), 0);

Move(AStr[1], arStr[0], len);


 
Palladin ©   (2009-12-08 19:07) [10]


> Юрий Зотов ©   (08.12.09 00:02) [6]

Просто не все читают учебники, но все с метлой бросаются в бой.



Страницы: 1 вся ветка

Текущий архив: 2010.01.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
15-1259515027
POOP
2009-11-29 20:17
2010.01.31
Проблема с печатью pdf.


15-1259098216
Юрий
2009-11-25 00:30
2010.01.31
С днем рождения ! 25 ноября 2009 среда


4-1227649316
KilkennyCat
2008-11-26 00:41
2010.01.31
Как из сервиса получить доступ к реестру пользователя?


1-1235866689
Misha Uskov
2009-03-01 03:18
2010.01.31
Просмотр JPEG с нестандартным EXIF IFD


10-1163425650
Note
2006-11-13 16:47
2010.01.31
Определение наличия подключений к серверу