![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Guest_Alexey |
|
|||
|
Unregistered |
Отцы! Такая в дельфях проблема -- в одном юните у меня класс - ничего особенного - там один рекортд, и пара процедурок -- одна инициализация полей рекорда. В другом модуле (формы) создаю укахатель на класс с помощью new, после попытки обратиться в процедуре генерит исключение. Что сделать?
[email protected] |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Нам бы код бы посмотреть бы.
Как я понимаю код небольшой и в сообщение влезет. Так что кидай прямо сюда. А мы рассмотрим. |
|||
|
||||
| Guest_Alexey |
|
|||
|
Unregistered |
AntonSaburov
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Dominos; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var c: PDomino; begin new©; c^.Init(0,0); end; end. unit Dominos; interface uses SysUtils, classes; type DSize=0..6; TPlain = record L:DSize; R:DSize; end; PDomino = ^TDomino; Tdomino = class (TObject) private Info:TPlain; protected public Procedure Init(LL:integer{ DSize};RR:integer {DSize}); function GetAsText:string; published end; implementation { Tdomino } Procedure Tdomino.Init(LL:integer{ DSize};RR:integer {DSize}); begin Info.L:=LL; Info.R:=RR; end; function Tdomino.GetAsText: string; var d:TPlain; begin d:=self.Info ; GetAsText:=IntToStr(Info.L)+'|'+IntToStr(Info.R); end; end. |
|||
|
||||
| AntonSaburov |
|
||||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Ну теперь все понятно. Код правильный смотри ниже. Обрати внимание на следующее:
Если ты объявляешь тип как class, то он автоматически является по сути указателем. И поэтому к нему надо применять метод Create А объявлять указатель на класс не надо. Переменная такого типа сама указатель и есть. Просто с не теперь можно без "шляпки" обходиться. Посмотри внимательно на код процедуры TForm1.Button1Click. Вот там есть ошибка - будет утечка памяти - ты выделяешь память под объект типа TDomino, а потом локальная переменная c, которая содержит этот указатель у тебя исчезает (он локальная в процедуре). И каждый раз при вызове Button1.Click у тебя будет съедаться кусок памяти размеров с TDomino. А теперь непосредственно код:
|
||||
|
|||||
| Unregistered |
|
|||
|
Unregistered |
Большое thanx, все сработало
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |