Вниз
Скачать: CL | DM;

Валидность указателя.   Найти похожие ветки 

← →
@!!ex_   (2007-06-07 08:54) [0]

Можно ли как то проверить?


← →
MBo ©   (2007-06-07 09:12) [1]

А зачем?


← →
Грициан   (2007-06-07 09:15) [2]

function IsBadCodePtr; external kernel32 name "IsBadCodePtr";
function IsBadHugeReadPtr; external kernel32 name "IsBadHugeReadPtr";
function IsBadHugeWritePtr; external kernel32 name "IsBadHugeWritePtr";
function IsBadReadPtr; external kernel32 name "IsBadReadPtr";
function IsBadStringPtr; external kernel32 name "IsBadStringPtrA";
function IsBadStringPtrA; external kernel32 name "IsBadStringPtrA";
function IsBadStringPtrW; external kernel32 name "IsBadStringPtrW";
function IsBadWritePtr; external kernel32 name "IsBadWritePtr";


← →
@!!ex_   (2007-06-07 09:32) [3]

Круто. Спасибо!


← →
homm ©   (2007-06-07 09:39) [4]

Указатель то может статся и валидным, а вот как проверишь, указывает ли он на нужные тебе данные, или уже нет?


← →
Жуков Олег   (2007-06-07 09:40) [5]

(Указатель всегда валиден)


← →
Александр Иванов ©   (2007-06-07 09:46) [6]

> [5] Жуков Олег   (07.06.07 09:40)

Ага, и AV это галлюцинация пользователя.


← →
homm ©   (2007-06-07 09:49) [7]

У дельфи, кстати свой менеджер памяти. Очень часто бывает ситуация, когда память выделеная им с точки зрения винды валидна, а вот он(менеджер) ее для нужд приложения не выделаял, соответственно указатель невалидный.


← →
Жуков Олег   (2007-06-07 10:10) [8]


> Александр Иванов ©   (07.06.07 09:46) [6]
>
>

Это неверная операция, нечего туда лезть, и не будет AV. А как указатель - вполне себе валиден, указывает на область памяти. Другой вопрос, что с этой памятью можно делать.

Пример:
var
 p: PString;
...
 GetMem(p, 1);
 p^ := "Очень длинная строка"; // Валиден ли p?


← →
oxffff ©   (2007-06-07 10:20) [9]


> Жуков Олег   (07.06.07 10:10) [8]
>
> > Александр Иванов ©   (07.06.07 09:46) [6]
> >
> >
>
> Это неверная операция, нечего туда лезть, и не будет AV.
>  А как указатель - вполне себе валиден, указывает на область
> памяти. Другой вопрос, что с этой памятью можно делать.
>
> Пример:
> var
>  p: PString;
> ...
>  GetMem(p, 1);
>  p^ := "Очень длинная строка"; // Валиден ли p?


procedure TForm1.Button1Click(Sender: TObject);
var a:PString;
begin
GetMem(a,4);
ZeroMemory(a,4);
a^:="Очень длинная строка!!!!!!!!!!!!!!!!!!!";
showmessage(a^);
Finalize(a^);
end;

Жуков Олег? Валиден p?


← →
oxffff ©   (2007-06-07 10:22) [10]


> Жуков Олег? Валиден a?


← →
Жуков Олег   (2007-06-07 10:40) [11]


> Жуков Олег? Валиден p?
>


Не знаю. Думаю, понятие "валидность" применительно к указателю бессмысленно, как и любой другой переменной вне контекста использования. Всё зависит от выполняемой операции, и операция может быть валидной или невалидной. А не указатель. Так что ответ: NULL (Не знаю);



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.016 c
15-1181182756
Slider007
2007-06-07 06:19
2007.07.08
С днем рождения ! 7 июня 2007 четверг


2-1181866938
delphino
2007-06-15 04:22
2007.07.08
Подскажите как можно сделать


1-1178639823
Oleg_teacher
2007-05-08 19:57
2007.07.08
Размер мемо


15-1181230858
oldman
2007-06-07 19:40
2007.07.08
Кого достал какой модератор данного сайта? Предложение по примире


2-1181754485
molotok
2007-06-13 21:08
2007.07.08
работа с Word файлами




   Наверх