![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с контруктором [D7, WinXP]
alexproger © (2005-11-28 14:49:00)Всем доброго времени суток.
Возникла проблема. Есть объект, наследник TObject. В этом объекте есть private-свойство PChar. Создаю контруктор с параметром типа PChar. При попытке выделить память под свойство объекта выдаётся ошибка. Код конструктора приведен ниже:
constructor TMyObj.Create(Param:PChar);
var
len:integer;
begin
inherited Create;
Len:=StrLen(Param)+1;
GetMem(Self.FPcharParam,Len); //Вот тут - Access Violation
StrCopy(Self.FPcharParam,Param);
Self.FPcharParam:=Param;
//.....
end;
Param нормально проинициализирован
Заранее благодарен за помощь.
alexproger (2005-11-29 00:56:00) [1]Доброго времени суток!
Благодарю за помощь. Особая благодарность - Leonid Troyanovsky, т.к. после его совета всё встало на свои места и я сам обнаружил свой "баг", и долго смеялся....
Владислав (2005-11-28 15:59:00) [2]Осмелюсь предположить...
var
MyObj: TMyObj;
// ...
MyObj.Create('String');
Leonid Troyanovsky (2005-11-28 15:56:00) [3]
> alexproger © (28.11.05 14:49)
> Self.FPcharParam:=Param;
Это совсем лишнее.
Кста, если AV, в самом деле, на GetMem, значит ошибка имела место
несколько раньше (например, невыделенный буфер для API вызова).
--
Regards, LVT.
Владислав (2005-11-28 15:26:00) [4]
TMyObj = class(TObject)
private
FMyParam: string;
//...
end;
constructor TMyObj.Create(Param:PChar);
begin
inherited Create;
FMyParam := Param;
//.....
end;
Reindeer Moss Eater (2005-11-28 15:00:00) [5]А зачем вообще возня с приватным PChar, если ты все равно память рапределяешь под строку?
используй приватное поле string.
Reindeer Moss Eater (2005-11-28 14:53:00) [6]И зачем вообще явно указывать Self?
Reindeer Moss Eater (2005-11-28 14:52:00) [7]не может быть в этом месте AV.