Вниз
Скачать: 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.014 c
3-1176275103
PEAKTOP
2007-04-11 11:05
2007.07.08
Транзакция и EXECUTE STATEMENT


4-1169975166
LENIN_INC
2007-01-28 12:06
2007.07.08
LENIN INC WIN32API Library v1.2 (build 23.08.2006)


4-1169652134
Humorist
2007-01-24 18:22
2007.07.08
как получить изображение окна, которое скрыто другими


2-1181817231
SunriseGirl
2007-06-14 14:33
2007.07.08
Базы данных, работа с компонентами


2-1181923635
nord489
2007-06-15 20:07
2007.07.08
DBGrid




   Наверх