Форум: "Начинающим";
Текущий архив: 2010.01.31;
Скачать: [xml.tar.bz2];
Вниз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 operationvar
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c