Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Invalid pointer operation... [D7]


istok20 ©   (2009-12-07 23:16:00) 

В данном коде иногда возникает 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], но это исключение при этом условии пока не воспроизводится..

Спасибо.


Palladin   (2009-12-08 19:07:00) [1]


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

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


icWasya   (2009-12-08 17:52:00) [2]

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

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


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


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

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


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

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

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


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

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


KilkennyCat   (2009-12-07 23:39:00) [6]

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


Eraser   (2009-12-07 23:37:00) [7]

> [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));


istok20   (2009-12-07 23:36:00) [8]

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


KilkennyCat   (2009-12-07 23:34:00) [9]

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


istok20   (2009-12-07 23:27:00) [10]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо