Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1290062412
Сергей
2010-11-18 09:40
2011.03.06
Delphi и Access


2-1292171520
v_a_belousov
2010-12-12 19:32
2011.03.06
Отправка письма


15-1290872112
Unknown_user
2010-11-27 18:35
2011.03.06
DCC32 и Turbo pascal


3-1253799297
N/O
2009-09-24 17:34
2011.03.06
vopros po TClientDataSet


15-1290202186
Юрий
2010-11-20 00:29
2011.03.06
С днем рождения ! 20 ноября 2010 суббота





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский