Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Pascal-функция, которая возвращает указатель-нет ли утечки?

Ответить
Настройки темы
Разное - Pascal-функция, которая возвращает указатель-нет ли утечки?

Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25


Конфигурация

Профиль | Отправить PM | Цитировать


Есть такие типы данных:
Код: Выделить весь код
  type
    Plane=record
      name: string[20];
      manfac: string[20];
      lengs: integer;
      height: integer;
      wingsL: integer;
      wingsS: integer;
    end;
    PPlane=^Plane;
    TFile = File of Plane;
и несколько функций:
Код: Выделить весь код
  {reads data from keyboard and returns completed Plane Record}
  function EnterItem:PPlane;
    var
      ptmp:PPlane;
    begin
      New(ptmp);
      writeln('Enter name of plane(string, 20 chars):');
      readln(ptmp^.name);
      writeln('Enter manufactor of plane(string, 20 chars):');
      readln(ptmp^.manfac);
      writeln('Enter length of plane(integer):');
      readln(ptmp^.lengs);
      writeln('Enter heigth of plane(integer):');
      readln(ptmp^.height);
      writeln('Enter length of wings(integer):');
      readln(ptmp^.wingsL);
      writeln('Enter square of wings(integer):');
      readln(ptmp^.wingsS);
      EnterItem:=ptmp;
    end;
  {adds N items to end of main file(f)}
  procedure NToEnd (n:integer;var f:TFile);
    var
      i:integer;
    begin
      RESET(f);
      seek(f,filesize(f));
      for i:=1 to n do
        begin
          writeln('Entering item number:',i);
          write(f,EnterItem^);
        end;
      writeln('Entering finished!');
      CLOSE(f);
    end;
и вопрос: не будет ли утечки памяти при такой реализации, будут ли экземпляры Plane удалятся с памяти после использования? Такая реализация возникла при создании функции которая должна возвратить собственный тип, чего Турбо Паскаль не позволяет...

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 20:34, 12-02-2011

 

Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


Сам же сразу отвечаю на свой вопрос:будет. Нужно вызывать функцию Dispose(p: Pointer).

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 20:35, 12-02-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


Вот тестовый пример, который показывает данную ситуацию:
Код: Выделить весь код
program qwerty;
type
  Myarr=array[1..10] of real;
  PMyarr=^Myarr;
var
  p:PMyarr;
  i:integer;
function retp:PMyarr;
  var
    retval:PMyarr;
  begin
    New(retval);
    retp:=retval;
  end;
begin
  i:=0;
  while true do
    begin
      p:=retp;
     {Dispose(p);}
      i:=i+1;
      writeln(i)
    end
end.
Вылетает с ошибкой на 8447 итерации цикла. Раскоментировав строку {Dispose(p);} бесконечно работающий цикл.

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 20:50, 12-02-2011 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Pascal-функция, которая возвращает указатель-нет ли утечки?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Есть такая функция у mail.ru в Мой Мир, Которая бы не давала скачивать мои личные фот micro8 Хочу все знать 9 08-07-2010 17:39
Теория - Указатель на многомерный массив (Pascal) Kowu Программирование и базы данных 2 02-11-2009 22:09
Разное - Возвращает указатель.... Что это означает Alkash_irk Программирование и базы данных 3 20-02-2008 20:04
бесконечный цикл. Функция не возвращает FALSE ? xamelion Вебмастеру 5 19-09-2005 14:21
Можно ли создать указатель на указатель? Sharkky Программирование и базы данных 2 24-09-2003 14:35




 
Переход