Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
8-1201820831
cerber
2008-02-01 02:07
2010.01.31
"програмно" нажать ссылку в флеш анимации.


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


2-1260353826
Б
2009-12-09 13:17
2010.01.31
Как возвести целое число в n-ую степень в Pascal?


11-1210698126
AndreyRus
2008-05-13 21:02
2010.01.31
Unit KOLadd implicitly imported into package MirrorKOLPackage


2-1259847059
Anastasia
2009-12-03 16:30
2010.01.31
Как передать значение функции и получить результат?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский