Форум: "Начинающим";
Текущий архив: 2011.03.06;
Скачать: [xml.tar.bz2];
ВнизПро память и указатели Найти похожие ветки
← →
gosha52 (2010-12-11 12:33) [0]Здравствуйте друзья.
За плечами годы опыта программирования на паскале, но до этого момента никогда не сталкивался со следующей мыслью.
Предположим, что за время работы программы, очень часто приходится создавать какой-либо объект. После того как объект отработал, уничтожаем его, но при этом временно сохраняем указатель на него (понятно что указатель уже не актуален). Так вот задался вопросом, какова вероятность того, что именно по этому указателю в дальнейшем в моей программе может быть создан такой же объект, если учесть что именно эти объекты за время работы программы создаются и уничтожаются огромное число раз?
Согласен, вопрос диковатый. Но я столкнулся, как мне кажется, именно с этой проблемой у себя в коде.
← →
Плохиш © (2010-12-11 12:42) [1]
> Согласен, вопрос диковатый. Но я столкнулся, как мне кажется,
> именно с этой проблемой у себя в коде.
Вы столкнулись не с этой проблемой, а с ошибкой в Вашей программе.
← →
gosha52 (2010-12-11 12:47) [2]Плохиш,
Спасибо, до вас я не знал, что где-то у меня в коде есть проблема. Мне бы больше помогла информация по теме.
← →
Плохиш © (2010-12-11 12:51) [3]
> Мне бы больше помогла информация по теме.
Мне погадать чтоли?
← →
Плохиш © (2010-12-11 12:52) [4]Во погадал - у вас ошибка в 17й строке.
← →
gosha52 (2010-12-11 12:58) [5]Плохиш,
вопрос не по поиску ошибки в моем коде был вообще-то. Раз в полгода сюда захожу и что-то как-то тут с каждым разом все хуже и хуже. Я как бы не хамил вам и нечего из себя умника строить.
← →
йцуфыв (2010-12-11 13:10) [6]Это же Плохиш! А "Плохиш" - это значит плохой. ;) Этим ником все сказно, не обращай внимание )))
← →
И. Павел © (2010-12-11 13:12) [7]
> gosha52 (11.12.10 12:33)
Тут нужно применять простой и стандартный механизм: сразу после того, как вы освобождаете объект, присваеваете ссылки на него значение nil:
Data.Free;
Data := nil;
И теперь, перед тем, как использовать Data, проверяете ее на nil, и если Data = nil, то ссылка уже не актуальна.
← →
Плохиш © (2010-12-11 13:13) [8]
> gosha52 (11.12.10 12:58) [5]
>
> Плохиш,
> вопрос не по поиску ошибки в моем коде был вообще-то.
Извини. Раз в твоём коде ошибок нет, то это совместная работа вындовс и делфи виновата, надо их переустановить.
← →
И. Павел © (2010-12-11 13:14) [9]А если оставлять ссылки на удаленные объекты, то можно столкнуться с большими трудностями. Кажется, нежавно тут приводили код, когда использование ссылки на удаленный объект привожило к изменению свойств какого-то другого объекта. В общем, так лучше не делать.
← →
gosha52 (2010-12-11 13:16) [10]Ясно. Просто для непостояльцев этого проекта, как-то не очень приятно встречать вот таких плохишей.
С проблемой разобрался сам. Да, дело именно в этом и было. Указатель не утрачивает свою актуальность при создании очередного такого же объекта, после уничтожения предыдущего. Что-то я как-то упустил этот суровый момент, память то не бесконечная.
← →
gosha52 (2010-12-11 13:23) [11]Если кому-то будет полезно, то проверил вот так:
procedure TForm1.Button1Click(Sender: TObject);
var Btn1: TButton;
p1: Pointer;
begin
Btn1 := TButton.Create(nil);
p1 := @Btn1;
Btn1.Free;
Btn1 := TButton.Create(nil);
TButton(p1^).Parent := Self;
end;
← →
Anatoly Podgoretsky © (2010-12-11 15:19) [12]> gosha52 (11.12.2010 12:33:00) [0]
Не дикий ответ, не сохраняй, тем более что знаешь что указатель заведомо не
актуальный.
Ты что мазохист? Или как?
← →
Anatoly Podgoretsky © (2010-12-11 15:20) [13]> gosha52 (11.12.2010 12:33:00) [0]
Ах да, нет никакой проблемы.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.03.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c