Форум: "Прочее";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];
ВнизПравильное завершение программы Найти похожие ветки
← →
xayam © (2007-02-13 11:06) [0]Незнаю почему, но периодически при закрытии приложения выскакивает ошибка типа "Память с адресом ... не может быть read ..."
По каким причинам это может происходить?
← →
stone © (2007-02-13 11:07) [1]ошибка в 17-ой строке
← →
tesseract © (2007-02-13 11:08) [2]Указатели / много всяких Free объекта.
← →
xayam © (2007-02-13 11:14) [3]
> tesseract © (13.02.07 11:08) [2]
> Указатели / много всяких Free объекта.
free я не вызываю, dpr правил вручную -program DelphiTo;
uses
Forms,
UMForm in "UMForm.pas" {FD2h},
UAbout in "UAbout.pas" {AboutBox},
ULicense in "ULicense.pas" {LicenseDialog},
UFView in "UFView.pas" {FView: TFrame},
UFPublic in "UFPublic.pas" {FPublic: TFrame},
UFFiles in "UFFiles.pas" {FFiles: TFrame},
UFOptions in "UFOptions.pas" {FOptions: TFrame},
UFOMain in "UFOMain.pas" {FOMain: TFrame},
UFOFiles in "UFOFiles.pas" {FOFiles: TFrame},
UFOPublic in "UFOPublic.pas" {FOPublic: TFrame},
UFOOther in "UFOOther.pas" {FOOther: TFrame},
UFOConvert in "UFOConvert.pas" {FOConvert: TFrame},
UFOHtml in "UFOHtml.pas" {FOHtml: TFrame},
UFOCss in "UFOCss.pas" {FOCss: TFrame},
UFOSsi in "UFOSsi.pas" {FOSsi: TFrame},
UTemplateConst in "UTemplateConst.pas",
...;
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TFD2h, FD2h);
Application.CreateForm(TAboutBox, AboutBox);
Application.CreateForm(TLicenseDialog, LicenseDialog);
Application.CreateForm(TFFiles, FFiles);
FFiles.Parent:= FD2h.JvStandardPage1;
Application.CreateForm(TFView, FView);
FView.Parent:= FD2h.JvStandardPage2;
Application.CreateForm(TFPublic, FPublic);
FPublic.Parent:= FD2h.JvStandardPage3;
Application.CreateForm(TFOptions, FOptions);
FOptions.Parent:= FD2h.JvStandardPage4;
Application.CreateForm(TFOMain, FOMain);
FOMain.Parent:= FOptions.PagesOption.Pages[0];
Application.CreateForm(TFOFiles, FOFiles);
FOFiles.Parent:= FOptions.PagesOption.Pages[1];
//view
Application.CreateForm(TFOPublic, FOPublic);
FOPublic.Parent:= FOptions.PagesOption.Pages[3];
Application.CreateForm(TFOConvert, FOConvert);
//4-5
FOConvert.Parent:= FOptions.PagesOption.Pages[6];
Application.CreateForm(TFOHtml, FOHtml);
FOHtml.Parent:= FOptions.PagesOption.Pages[7];
Application.CreateForm(TFOCss, FOCss);
FOCss.Parent:= FOptions.PagesOption.Pages[8];
Application.CreateForm(TFOSsi, FOSsi);
FOSsi.Parent:= FOptions.PagesOption.Pages[9];
//10-16
Application.CreateForm(TFOOther, FOOther);
FOOther.Parent:= FOptions.PagesOption.Pages[17];
Application.Run;
end.
соответственно переменные FFiles...FOOther (фреймы) объявлены как глобальные в модулях UFFiles...UFOOther
← →
Плохиш © (2007-02-13 11:15) [4]
> xayam © (13.02.07 11:14) [3]
В таком коде может быть всё что угодно...
← →
xayam © (2007-02-13 11:25) [5]
> Плохиш © (13.02.07 11:15) [4]
> > xayam © (13.02.07 11:14) [3]
> В таком коде может быть всё что угодно...
а из-за вложенных фреймов такое может быть? Например при неправильном порядке вызовов free
← →
evvcom © (2007-02-13 11:29) [6]> [5] xayam © (13.02.07 11:25)
Тебе ж сказали, "все, что угодно"! В смысле "может".
← →
xayam © (2007-02-13 11:31) [7]
> evvcom © (13.02.07 11:29) [6]
> > [5] xayam © (13.02.07 11:25)
> Тебе ж сказали, "все, что угодно"! В смысле "может".
понятно, непонятно как отловить эту ошибку. Вообще мне нужно самостоятельно вызывать метод free для глобальных переменных-фреймов, если свойство Parent у каждого фрейма установлено, как в коде выше?
← →
Плохиш © (2007-02-13 11:37) [8]
> xayam © (13.02.07 11:31) [7]
> понятно, непонятно как отловить эту ошибку.
Если это не понятно, при всём количестве средств отладки встроенном в делфи, то тебе надо менять профессию пока не поздно.
← →
xayam © (2007-02-13 11:39) [9]
> Плохиш © (13.02.07 11:37) [8]
> > xayam © (13.02.07 11:31) [7]
> > понятно, непонятно как отловить эту ошибку.
> Если это не понятно, при всём количестве средств отладки
> встроенном в делфи, то тебе надо менять профессию пока не
> поздно.
дык, так эта ошибка раз-два в день появляется. Если бы при каждом завершении работы)) было б конечно лучше
← →
evvcom © (2007-02-13 12:02) [10]> [7] xayam © (13.02.07 11:31)
> Вообще мне нужно самостоятельно вызывать метод free для
> глобальных переменных-фреймов
Ух... :(
Разбираться в твоем хитросплетении естественно никому нехоца, дам лишь совет. Перед вызовом free запомни объект в локальной переменной, потом обнули ссылку на объект, а потом уж вызывай Free. Это тебе даст гарантию того, что для уже уничтожаемого объекта ты рекурсивно не вызовешь повторно Free. Или используй FreeAndNil, там уже это реализовано.
И. Сколько ссылок на один и тот же объект ты хранишь?
← →
xayam © (2007-02-13 12:10) [11]
> evvcom © (13.02.07 12:02) [10]
> Сколько ссылок на один и тот же объект ты хранишь?
одна переменая на каждый фрейм
← →
xayam © (2007-02-13 12:21) [12]кстати можно же Attach to process сделать и найти место ошибки, блин а вот адрес я не записал ((
← →
Desdechado © (2007-02-13 12:30) [13]MemProof для мониторинга потерянных ресурсов
← →
evvcom © (2007-02-13 12:33) [14]> [12] xayam © (13.02.07 12:21)
Место ошибки прога тебе и так должна сообщить, а аттачиться совсем необязательно. Запускаешь прогу, Search - Find Error и вводи свой адрес.
← →
xayam © (2007-02-13 12:38) [15]
> evvcom © (13.02.07 12:33) [14]
> > [12] xayam © (13.02.07 12:21)
> Место ошибки прога тебе и так должна сообщить, а аттачиться
> совсем необязательно. Запускаешь прогу, Search - Find Error
> и вводи свой адрес.
а я из проводника обычно запускаю
> Desdechado © (13.02.07 12:30) [13]
> MemProof для мониторинга потерянных ресурсов
спасибо, посмотрю
← →
Elen © (2007-02-13 12:46) [16]
> а я из проводника обычно запускаю
Из проводника много не увидишь. Запускай из делфы и правь дебугером.
← →
evvcom © (2007-02-13 12:49) [17]> [15] xayam © (13.02.07 12:38)
> а я из проводника обычно запускаю
При отображении ошибки в [0] указывается также место, где она возникла. Переписываешь адресок на бумажку и бежишь на машину, где установлена Дельфя с исходниками (не правленными) той самой версии, которая только что тебе выдала ошибку. Далее запускаешь Дельфи и [14]
← →
xayam © (2007-02-13 13:27) [18]
> Desdechado © (13.02.07 12:30) [13]
> MemProof для мониторинга потерянных ресурсов
а где последнюю версию скачать можно? в файлообменной сети нашел версию 0.9.50 но ждать наверно долго придется
← →
evvcom © (2007-02-13 14:45) [19]> [18] xayam © (13.02.07 13:27)
Она, по-моему, шароварная и линки в сети были помимо осликов.
← →
roottim © (2007-02-13 15:25) [20]я пользуюсь MemCheck, на тестах скрыте утечки вылавливал.. в vcl они тоже есть, так что разбирать надо каждый пункт отловленного.
MemCheck: the ultimate memory troubles hunter
Created by: Jean Marc Eber & Vincent Mahon, Sociщtщ Gщnщrale, INFI/SGOP/R&D
Version 2.73 -> Also update OutputFileHeader when changing the version #
Contact...
Vincent.Mahon@free.fr
http://v.mahon.free.fr/pro/freeware/memcheck
Mail address:
Tour Sociщtщ Gщnщrale
Sgib/Sgop/R&D
92987 Paris - La Dщfense cedex
France
← →
xayam © (2007-02-13 15:37) [21]
> roottim © (13.02.07 15:25) [20]
> я пользуюсь MemCheck
это я уже пробовал, исходники вообще-то даже не компилируется, несколько ошибок в коде.
А с этим вообще стоит связываться?
http://sourceforge.net/projects/fastmm/
← →
atruhin © (2007-02-13 15:44) [22]> А с этим вообще стоит связываться?
Однозначно. Только хотел посоветовать. Выдает полный лог, что не освобождено, в каких строках программы выделен данный блок,
состояние стека, следит за попыткой повторного освобождения памяти.
← →
roottim © (2007-02-13 15:45) [23]яж говорю пользуюсь.. т.е. работеат
а куго чего некопилируется мне уже по барабану...
← →
xayam © (2007-02-13 15:55) [24]
> atruhin © (13.02.07 15:44) [22]
> > А с этим вообще стоит связываться?
> Однозначно. Только хотел посоветовать. Выдает полный лог,
> что не освобождено, в каких строках программы выделен данный
> блок,
> состояние стека, следит за попыткой повторного освобождения
> памяти.
че то я не очень понял как ей пользовать, прикомпилировал к своему проекту демо пример, запустил показывает окно с двумя разделами - Memory Map и Block Statistics. Как узнать есть утечки или нет? И что означают цвета в Memory Map?
← →
xayam © (2007-02-13 16:00) [25]
> И что означают цвета в Memory Map?
А ну с цветами понятно
← →
atruhin © (2007-02-13 18:31) [26]Прочитай FastMM4_FAQ.txt.
> прикомпилировал к своему проекту демо пример
Нафига. На то он и демо. К проекту нужно добавить ТОЛЬКО FastMM4, прописать 1 раз,
в dpr файле причем ПЕРВЫМ.
Все остальное настраиваеться в FastMM4Options.inc
В общем читай, там все подробно расписанно.
← →
xayam © (2007-02-13 19:08) [27]
> atruhin © (13.02.07 18:31) [26]
> Прочитай FastMM4_FAQ.txt.
> > прикомпилировал к своему проекту демо пример
> Нафига. На то он и демо. К проекту нужно добавить ТОЛЬКО
> FastMM4, прописать 1 раз,
> в dpr файле причем ПЕРВЫМ.
так это я сразу сделал. А что происходит, если будет утечка памяти? Какое-то сообщение вылезет?
← →
Psychedelic © (2007-02-13 19:34) [28]
> а где последнюю версию скачать можно? в файлообменной сети
> нашел версию 0.9.50 но ждать наверно долго придется
Ты что пользоваться поисковиками не умеешь?
Еще и разжевать просит. Первый линк в google по запросу выдает свежую версию.
Трындец, ну народ пошел.
← →
atruhin © (2007-02-13 20:46) [29]> А что происходит, если будет утечка памяти? Какое-то сообщение
> вылезет?
Все зависит от настроек. У меня при закрытии программы вылазит окошко с краткой информацией об утечках,
полная информация пишется в лог.
См. внимательно FastMM4Options.inc
← →
xayam © (2007-02-13 21:03) [30]
> atruhin © (13.02.07 20:46) [29]
> > А что происходит, если будет утечка памяти? Какое-то сообщение
> > вылезет?
> Все зависит от настроек. У меня при закрытии программы вылазит
> окошко с краткой информацией об утечках,
> полная информация пишется в лог.
> См. внимательно FastMM4Options.inc
уже на два раза пересмотрел файл, не нашел такой настройки, но у меня с аглицким не очень)), хотя уже наверно не нужно memproof"ом нашел источник ошибок.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.047 c