Форум: "Прочее";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];
ВнизВалидность указателя. Найти похожие ветки
← →
@!!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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.046 c