Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.08;
Скачать: 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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.075 c
3-1176198348
rexti
2007-04-10 13:45
2007.07.08
как создать таблицу dbase


15-1181383082
Dmitry_177
2007-06-09 13:58
2007.07.08
Просмотр тела функции в Visual Studio


8-1161236261
Tab
2006-10-19 09:37
2007.07.08
рисование через буфер (GDI+)


1-1178384004
vofk
2007-05-05 20:53
2007.07.08
Использование Unicode


15-1181377892
matt
2007-06-09 12:31
2007.07.08
Приблуда для дельфи