71 / 71 / 2
Регистрация: 28.10.2010
Сообщений: 329
1

Тупит функци

13.08.2013, 17:27. Показов 435. Ответов 6
Метки нет (Все метки)

Вот функция:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Function ReadConf(FileName:String; Attr,MaxRange:Integer):Tstringlist;
var
  I,Indx:Integer;
  TempTString:TStringList;
begin
  OpenConf(FileName);
  if Not FileExists(WorkConf.FileName) then
    begin
      FillInfo(WorkConf.FileName);
 
      WorkConf.WriteString('File1','FileName',ExtractFileName(FileName));
      WorkConf.WriteString('File1','Attr1','');
      WorkConf.WriteString('File1','Attr2','');
      WorkConf.WriteString('File1','Attr3','');
      WorkConf.WriteString('File1','Attr4','');
      WorkConf.WriteString('File1','Attr5','');
      WorkConf.WriteString('File1','Attr6','');
      WorkConf.WriteString('File1','Attr7','');
      Indx:=1;
    end
  else
    begin
      Indx:= FindIndex(FileName,True,MaxRange);
    end;
 
  TempTString:=TStringList.Create;
  TempTString.Clear;
  TempTString.Add(IntToStr(Indx));
  if attr=0 then
    begin
      I:=0;
      repeat
        inc(I);
        TempTString.Add(WorkConf.ReadString('File'+IntToStr(Indx),'Attr'+IntToStr(I),'nil'));
      until i=ParamCount;
    end
  else
    begin
      TempTString.Add(WorkConf.ReadString('File'+IntToStr(Indx),'Attr'+IntToStr(Attr),'nil'));
    end;
  Result:=TempTString;
  //TempTString.Free; //IF not Commented, returns nothing... <MUST BE SOLVED>
  CloseConf;
end;
Спросите где тупит функция? Вот где:
Delphi
1
  TempTString.Free; //IF not Commented, returns nothing... <MUST BE SOLVED>
А именно, если не комментировать, то функция ничего не возвращает....
То есть Result Пуст...
Кто знает как исправить, и надо ли?

Ver: DELPHI XE
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.08.2013, 17:27
Ответы с готовыми решениями:

Протабулировать функци
помогите первокурснику с написанием программы (Ссылка на сторонний ресурс удалена)

график функци f=a*sin(t)
не могу построить графики.. на скрине вводим цифры в Edit1 и Edit2 и при на жатии на...

Программа шифрования (тупит Memo)
ребят, чего-т у меня Memo отказывается толком работать(( в программе необходимо, чтобы текст в...

Тупит мышка (MC 3.0) тупит
Есть мышка Microsoft InteliMouse Explorer 3.0 При нажатии 1 раз на правую кнопку мышки она делает...

6
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
13.08.2013, 17:31 2
Цитата Сообщение от Tornament Посмотреть сообщение
если не комментировать, то функция ничего не возвращает....
То есть Result Пуст
Ты ж его, результат, своими же руками и убиваешь в строке TempTString.Free..
А результату присваиваешь ссылку на только что собственноручно тобой убитый, т.е. уже несуществующий объект.
1
71 / 71 / 2
Регистрация: 28.10.2010
Сообщений: 329
13.08.2013, 17:37  [ТС] 3
Цитата Сообщение от mss Посмотреть сообщение
Ты ж его, результат, своими же руками и убиваешь в строке TempTString.Free..
А результату присваиваешь ссылку на только что собственноручно тобой убитый, т.е. уже несуществующий объект.
Так я же сначала присваиваю Result значение TempTString; и только потом стираю TempTString...
0
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
13.08.2013, 17:41 4
Цитата Сообщение от Tornament Посмотреть сообщение
Так я же сначала присваиваю Result значение TempTString
Тем самым ты копируешь ссылку на существующий на этот момент объект класса TStringList.
А при Free ты этот объект уничтожаешь, тем самым делая и оригинальную ссылку и ее копию невалидными, т.е. ссылающимися в никуда.
1
71 / 71 / 2
Регистрация: 28.10.2010
Сообщений: 329
13.08.2013, 17:46  [ТС] 5
Вот как значит, ссылку...
Большое спасибо за ответ!

А как тогда закрыть TempTString???
Или пускай висит?
0
пофигист широкого профиля
4436 / 2926 / 828
Регистрация: 15.07.2013
Сообщений: 16,848
13.08.2013, 18:06 6
Цитата Сообщение от Tornament Посмотреть сообщение
А как тогда закрыть TempTString???
Или пускай висит?
Тот кто вызвал эту функцию, тот и подчистит память когда в ней исчезнет надобность.

Добавлено через 4 минуты
Кстати необходимости в переменной TempTString не было никакой. Можно было сразу использовать Result
Delphi
1
2
  Result:=TStringList.Create;
  Result.Add(IntToStr(Indx));
1
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
13.08.2013, 18:14 7
Цитата Сообщение от Tornament Посмотреть сообщение
как тогда закрыть TempTString?
Не надо его "закрывать" - по завершении работы ф-ции оригинальная ссылка на объект будет автоматически уничтожена, а копию ссылки на тот же объект ты вернул через Result вызывающему ф-цию коду. С этого момента вызывающий код становится ответственным за уничтожение объекта, ссылку на который он получил как результат вызова ф-ции.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2013, 18:14

системные функци
Подскажите есть ли системные функции в PHP с помощью которых можно узнавать - на сколько загружен...

процедури и функци
Можете плиз помочь розобраться с процедурами и функциями просто: 1. Расположить элементы каждой...

Datatables по функци
как с помощью $(document).ready(function() { $('#example').DataTable( { &quot;paging&quot;: ...

Функци в функции
После соединения 2 массивов $s0 = array_combine($v1, $v2); &lt;form action=&quot;index.php?p=&lt;?php echo...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.