Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 18.11.2009, 15:44   #1
VladimirVB
Форумчанин
 
Аватар для VladimirVB
 
Регистрация: 12.10.2008
Сообщений: 131
Стрелка ООП

Здравствуйте. При создании объектной переменной s2 появляется ошибка при выделении памяти. Что неправильно?

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
const
  SIZE = 255;
type
  TStrType = class
    strict private
      p: PChar;
      len: Integer;
    public
      constructor Create(ptr: PChar);
      destructor Destroy; override;
      procedure Show;
  end;

{ TStrType }

// инициализация объекта строка
constructor TStrType.Create(ptr: PChar);
begin
  inherited Create;
  len := StrLen(ptr);
  try
    // при выделении памяти для s2 появляется ошибка
    GetMem(p, len + 1);
  except
    on EOutOfMemory do
      begin
        Writeln('Error allocation memory.');
        Abort;
      end;
  end;
  StrCopy(p, ptr);
end;

// Освобождение памяти при удалении объекта строка
destructor TStrType.Destroy;
begin
  Writeln('Free memory of address p');
  FreeMem(p);
  inherited;
end;

procedure TStrType.show;
begin
  Writeln(p, ' - length: ', len);
end;

var
  s1, s2: TStrType;

begin
  s1 := TStrType.Create('This is a check');
  s2 := TStrType.Create('I like a Delphi');

  s1.show;
  s2.show;

  s1.Free;
  s2.Free;

  Readln;
end.
VladimirVB вне форума
Старый 18.11.2009, 17:14   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Все как обычно.
Цитата:
ошибка при выделении памяти
Какая ошибка ? Где ее описание, текст ? Или Вам Windows выкидывает окошко где написано 'Ошибка!' ? Ну если так только...
Еще, будьте так любезны, сообщить нам какая версия Delphi / Code Gear ?
Лучше бы сразу сделали так
Код:
len := StrLen(ptr) * sizeof(CHAR);
хотя в не уверен, что там CHAR выбирается компилятором, автоматически, ну т.е. для ANSI версии в 1 байт, а для Unicode в 2.

Edit:
mutabor: не ужели была необходимост еще раз, в двух строках продублировать мой пост ?

Последний раз редактировалось BOBAH13; 18.11.2009 в 17:28.
BOBAH13 вне форума
Старый 18.11.2009, 17:15   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

GetMem(p, len*2 + 1);
Не забываем про юникод в Дельфи 2009. Или же используй PAnsiChar.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума
Старый 18.11.2009, 18:15   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
mutabor: неужели была необходимость еще раз, в двух строках продублировать мой пост ?
Вы на время создания постов смотрели? Сравните.
Вы просто одновременно с ним писали...
Что ж вы так переживаете? Никто ваши идеи себе не присваивает...
mihali4 вне форума
Старый 18.11.2009, 22:51   #5
VladimirVB
Форумчанин
 
Аватар для VladimirVB
 
Регистрация: 12.10.2008
Сообщений: 131
По умолчанию

Спасибо всем за советы. Проблема решена за счет использования PAnsiChar вместо PChar. Программа создавалась в Delphi 2009. А сам пример взят из книги Герберта Шилдта "Самоучитель C++". Только решил переделать пример из этой книги на Delphi.
VladimirVB вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ООП AlekDruzh Паскаль, Turbo Pascal, PascalABC.NET 0 09.09.2009 20:32
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55
ООП Римма Общие вопросы Delphi 16 15.04.2008 11:32
ООП Andrey Gort Общие вопросы Delphi 1 22.11.2006 15:01