1. Pascal / Говнокод #13750

    +165

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    Пишу менеджер автозапусков:
    
    type
      tregkey = class
        rootkey: hkey;
        keyname: string;
        param: string;
        value: string;
        function Rootkeyname:string;
      end;
    
    procedure TForm1.UpdateAutoruns;
    var
      i: integer;
      lst: tlistitem;
      rlist: tobjectlist;
      keyname: string;
      tregobj:tregkey;
    begin
      rlist := tobjectlist.create;
      ListView4.items.clear;
      try
        regread(windows.HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Run',rlist);
        regread(windows.HKEY_CURRENT_USER,
          'Software\Microsoft\Windows\CurrentVersion\RunOnce', rlist);
        regread(windows.HKEY_CURRENT_USER,
          'Software\Microsoft\Windows\CurrentVersion\RunServices', rlist);
        regread(windows.HKEY_CURRENT_USER,
          'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run', rlist);
        regread(windows.HKEY_CURRENT_USER,
          'HKEY_CURRENT_USER\Software\Microsoft\ Windows NT\CurrentVersion\Windows', rlist);
        regread(windows.HKEY_LOCAL_MACHINE,
          'Software\Microsoft\Windows\CurrentVersion\Run', rlist);
        regread(windows.HKEY_LOCAL_MACHINE,
          'Software\Microsoft\Windows\CurrentVersion\RunOnce', rlist);
        regread(windows.HKEY_LOCAL_MACHINE,
          'Software\Microsoft\Windows\CurrentVersion\RunServices', rlist);
        regread(windows.HKEY_LOCAL_MACHINE,
          'Software\Microsoft\Windows\CurrentVersion\RunServicesOnce', rlist);
        regread(windows.HKEY_LOCAL_MACHINE,
          'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows\CurrentVersion\RunOnceEx', rlist);
        for i := rlist.Count - 1 downto 0 do
        begin
          tregobj:=tregkey(rlist[i]);
          lst := ListView4.items.Add;
          keyname := format('%s\%s\%s', [tregobj.Rootkeyname,tregobj.keyname, tregobj.param]);
          lst.Caption :=keyname;
          lst.SubItems.AddObject(tregobj.value,tregobj);
        end;
      finally
        rlist.Free;
      end;
    end;
    
    
    
    В итоге этот код
    
    procedure TForm1.sBitBtn20Click(Sender: TObject);
    var
      i:integer;
      reg:tregistry;
    begin
        for i:= listview4.Items.Count -1 downto 0 do
        showmessage(tregkey(listview4.Items[i].subitems.Objects[0]).rootkeyname);
    end;
    
    либо вызывает ошибку доступа либо пустой messagebox. 
    В чем лажа? Я тупо не вижу ошибки.

    Запостил: Stertor, 07 Сентября 2013

    Комментарии (134) RSS

    • Да, чуть не забыл:
      function tregkey.Rootkeyname: string;
      begin
        case rootkey of
            windows.HKEY_LOCAL_MACHINE:
            RootKeyName:='HKEY_LOCAL_MACHINE';
         windows.HKEY_CURRENT_USER:
            RootKeyName:='HKEY_CURRENT_USER';
        end;
      end;
      
      
      procedure regread(rootkey: hkey; keytoopen: string; rlist: tobjectlist);
      var
        reg: tregistry;
        reglist: tstringlist;
        i: integer;
        rk: tregkey;
      begin
        reglist := tstringlist.create;
        reg := tregistry.create;
        reg.rootkey := rootkey;
        try
          reg.OpenKeyreadonly(keytoopen);
          reg.GetValueNames(reglist);
          for i := 0 to reglist.Count - 1 do
          begin
            try
              if reg.GetDataType(reglist[i]) = rdString then
              begin
                rk := tregkey.create;
                rk.rootkey :=reg.RootKey;
                rk.keyname := reg.CurrentPath;
                rk.param := reglist[i];
                rk.value := reg.ReadString(reglist[i]);
                rlist.Add(rk);
              end;
            except
            end;
          end;
        finally
          try
            reg.CloseKey;
            reg.Free;
          except
          end;
        end;
      end;
      Ответить
      • Скомпилил. Вот, что я скажу: а откажись-ка ты от объектлиста. Тстрингс самое то.
        Ну или приведи класс к тобъекту, имхо.
        Ответить
        • >>Ну или приведи класс к тобъекту, имхо.
          А по умолчанию разве не tobject?
          type
             tregkey=class// вот тут то и подразумевается tobject

          ...
          end;

          Дело явно в tobjectlist - я использовал его для удобства, чтобы не добавлять ненужные строки в tstringlist, так как обращение идет именно к объектам. Но я не понимаю, в чем разница - вроде и там объекты, и там. Однако с tstringlist никаких нареканий нет - работает.
          Ответить
          • Одолжите бутылку из под пива, письмо отправлю капитану Очевидности.
            Ответить
            • type
              
              { TObjectList class }
              
                TObjectList = class(TList) // tobjectlist наследник tlist, а tlist сохраняет указатели.
                private
                  FOwnsObjects: Boolean;
                protected
                  procedure Notify(Ptr: Pointer; Action: TListNotification); override;
                  function GetItem(Index: Integer): TObject;
                  procedure SetItem(Index: Integer; AObject: TObject);
                public
                  constructor Create; overload;
                  constructor Create(AOwnsObjects: Boolean); overload;
              
                  function Add(AObject: TObject): Integer;
                  function Extract(Item: TObject): TObject;
                  function Remove(AObject: TObject): Integer;
                  function IndexOf(AObject: TObject): Integer;
                  function FindInstanceOf(AClass: TClass; AExact: Boolean = True; AStartAt: Integer = 0): Integer;
                  procedure Insert(Index: Integer; AObject: TObject);
                  function First: TObject;
                  function Last: TObject;
                  property OwnsObjects: Boolean read FOwnsObjects write FOwnsObjects;
                  property Items[Index: Integer]: TObject read GetItem write SetItem; default;
                end;
              
              function TObjectList.Add(AObject: TObject): Integer;
              begin
                Result := inherited Add(AObject);
              end;

              Это песдец, господа! Тип поинтер приводится к tobject-у.
              Ответить
              • > Тип поинтер приводится к tobject-у.
                А если постараться, то и к Integer'у :) Правда это говно потом не будет работать на 64-битной платформе, но кого из дельфинов это волнует...
                Ответить
    • > либо вызывает ошибку доступа либо
      Ну запускай под отладчиком, смотри на каком шаге вылетает... Что тут еще посоветуешь...
      Ответить
      • Отладчик проскакивает ошибку. Номер строки не отображается, а в дампе хз что делать. я пока мало асм знаю.
        Ответить
        • Ы.з.
          гов...м бы было, если бы я писал это на сишке или сиподобных языках -
          ухлопал бы уйму времени и сил: а ля сизифов труд, епта. А тут -
          переписал код в два счета, и вуаля.
          Ответить
          • Переходи на управляемые языки, там не надо знать асм, чтобы разбирать полеты.
            Ответить
            • Что ты имеешь в виду?
              Ответить
              • google:языки со сборкой мусора
                Ответить
                • платформа .net/арестованные си? В гробу я их видел.
                  Чудно как-то.ю когда прога в 200 кб требует установленного фреймворка который весит почти гиг - "родила гора мышь" . Я уж как нибудь потерплю Делфю.
                  Ответить
                  • ставь компилятор шарп/джавы, пиши в блокноте и компиль ручками. И, если ты вдруг не знал, можно ставить облегченные версии IDE, тем более все равно ты пользуется только кнопкой откопмилить
                    Ответить
                    • Хуйню ты сморозил. Он говорит о том, что юзеру понадобится фреймворк, а не ему самому, во время разработки. Как здесь помогут легковесные IDE?
                      Ответить
                      • а, сорри, не правильно понял.

                        А фреймворки - это удобно. не нужно ничего таскать с собой. Имхо.
                        Ответить
                        • Кроме фреймворка, который весит почти 1 гиг, разумеется.
                          ПИЗДУЙ, говорю, отсюда, пока живой.
                          Ответить
                          • тетрадь смерти нашел что ли?)
                            Ответить
                          • >Кроме фреймворка, который весит почти 1 гиг, разумеется.
                            Толсто. Инсталлятор весит 20-40 метров, установленный дотнет - метров 400. Если ты не полный нищеброд, проблем не будет.
                            Ответить
                            • Сути дела это не меняет: родила гора мышь.
                              Ответить
                              • А экзешники на метр со статическими библиотеками (ffmpeg вообще на 25 метров экзешник)?
                                Ответить
                                • Это не ко мне. Это к ним.
                                  Ответить
                                  • Это к таким как ты.
                                    Ответить
                                    • Попрошу мне не "ты"-кать. Я офицер!
                                      Ответить
                                      • Для вас, козлов, переход построили.
                                        Ответить
                                      • >Попрошу мне не "ты"-кать. Я офицер!

                                        генерал обосраного делфи
                                        Ответить
                                        • Кегдан, это ты тут у нас сосешь? Могу тебя обрадовать - я с Кавказа.
                                          Ответить
                                          • И как там овечки?
                                            Ответить
                                            • Ничего, приветы передают - твоей мамке.
                                              Ответить
                                              • Вы хороши тут пошлить, а знаете ли вы, какие прекрасные игры он написал? Я ради интереса порылся в исходниках = на чистом winapi,и работает без малейших ошибок, я даже под отладчиком запускал.
                                                Эмулятор же трамвая покорил мое сердце всерьез и надолго.

                                                http://tarasber.narod.ru/

                                                Ответить
                    • Ты для меня не авторитет. Это значит, что все, что ты напишешь, я просмотрю, а через мгновение забуду. Поэтому, ради аллаха, съебись с этой ветки и впредь обходи меня за версту.
                      Ответить
                  • >В гробу я их видел.
                    Зря ты так. Вылези уже из своих 90-х.

                    Дотнет по дефолту на спермерке. Да и нет никаких проблем сегодня один раз скачать и поставить фреймверк.
                    Ответить
                    • Как-то даже трояна на дотнете написали. Я сначала смеялся, но ничего, заработало.
                      Ответить
                      • Это ты сейчас смеешься, а потом лох над тобой посмеется, когда у него прога затребует mscoree.dll. А когда лох над кем то ржет, этот "кем-то" и лох автоматически обмениваются местами.
                        Ответить
                        • Ты плохо понимаешь суть ботнета. А суть эта - AoE, не важно, у скольки прога не заработала, важно, у скольки она заработала.
                          Ответить
                          • Да не загоняй ты так, по -черному. А то тут один олух ошивался, хотел получить пятно на погоны за мой счет. Латет ангуис их херба, так сказать.
                            Ответить
                    • Анонимб, да пойми ты, одна только мысль, что мои проги могут выдать у кого-то рантайм еррор, уже заставляют искать окольное решение, тем паче что на семерки с восьмерками еще не все перешли, а ставить фреймворк на икспи из юзеров в здравом уме никто не станет.
                      Ответить
                      • >а ставить фреймворк на икспи из юзеров в здравом уме никто не станет.
                        Вылазь из 90-х. Честно. У тебя делфи головного мозга.
                        Ответить
                        • не делфи, а отсутствие
                          Ответить
                          • смотри на 13 постов выше.

                            Ы.З
                            Пищи больше не будет. Ты съел все запасы на неделю.
                            Ответить
                      • > ставить фреймворк на икспи из юзеров в здравом уме никто не станет
                        Да куда они денутся. Сейчас даже сраные дрова на звуковуху без фреймворка не ставятся... Так что 2.0 тебе гарантирован на 99.9% компов с вендой.
                        Ответить
                        • Ничего подобного.
                          Ответить
                        • > Сейчас даже сраные дрова на звуковуху без фреймворка не ставятся...
                          Вот это,н аверно, толсто.
                          Ответить
                          • > Вот это,н аверно, толсто.
                            Это не толсто, это, емнип, ёбаная реальность :( Свежие риалтековские дрова вроде требовали фреймворк. И ATIшные на видео, насколько помню, тоже хотят, иначе панель управления у них не запускается.
                            Ответить
                    • показать все, что скрытоСделаю минет, вылижу анус и яйца волосатому парню с Кавказа. Желательно с большим рычагом, так как очко сильно раздолблено.
                      Ответить
          • В сиподобных языках, например крестах, есть нормальные коллекции в духе std::vector<reg_key>, а не это говно, называемое TObjectList, в который и примитив не засунуть, и без каста не вынуть, и ограничить допустимые классы никак.

            > Отладчик проскакивает ошибку. Номер строки не отображается
            Тогда просто пошагово потыкайся, F7/F8 или как там в делфе. На какой строке вылетит ошибка - та и бажная. Код небольшой, быстро протыкается.
            Ответить
            • В дельфи тоже есть. TList<tregkey>;
              Ответить
              • Евгений Ваганыч, перелогиньтесь.
                А если серьезно, кипа, ты же кое-чего смыслишь. Почему объекты из tobjectlist некорректно добавляются в listview?
                Ответить
                • Есть версия что TObjectList удаляет все содержащиеся объекты при своем удалении. То ли там какое-то свойство которое это регулирует, сейчас не могу проверить.
                  Ответить
    • показать все, что скрыто> Пишу менеджер автозапусков
      Из любопытства спрашиваю: autoruns Руссиновича не используете? Если да, то ради каких фич приходится писать своё приложение?
      Ответить
      • <<Из любопытства спрашиваю
        Любопытство - порок.
        Ответить
        • показать все, что скрытоОх, как много минусов... Может хватит уже обижаться?
          Ответить
          • Запомни раз и навсегда: для того, чтобы я чтобы я позволил себя троллить, это должен быть тролль высочайшей квалификации. Ты же с kengan (если вы - не одно и то же лицо) подобны щенку, который очень хочет кого нибудь укусить, в целях повышения самооценки - но любое проявление агрессии в его сторону, вроде хлопка ладонями, топанья ногами или грозого оклика, обращает его в бегство.
            Ответить
            • Кого это я хотел укусить и потроллить? Мы тут все в одной подводной лодке (ну, кроме тех, кто пишет "где здесь с++"). Я пару раз пошутил про квантовый компьютер, не более. Можно было посмеяться и забыть. Не надо так серьёзно это воспринимать.

              Удивляет, что у главного тролля такие бурные эмоции на невинное баловство посетителей ГК.
              Ответить
              • С мамой своей так побалуйтся, а с темы тебе лучше уйти. Тут решаются вопросы глобального значения, ответы на которые могут дать лишь избранные.
                Ответить
      • У него есть фатальный недостаток.
        Ответить
    • Мальчик, а "пожалуйста" где?
      Ответить
    • Магическая кнопка: основной код программы в обработчике формы. Дальше не читал.
      Ответить
      • >>основной код программы в обработчике формы

        А где он должен быть, в обработчике задницы?
        Ответить
        • Книжки почитай, чтоли. Или google: антипаттерн магическая кнопка

          Вот поэтому плохо начинать программировать с гуя.
          Ответить
          • ОМГ. Вопрос стоит не в том, с чего нужно начинать программирование...
            Ответить
    • finally
          rlist.Free;


      with нету?
      Ответить
      • > rlist.Free
        Кстати, а rlist.Free случаем не фришит все элементы, которые в нем лежат? Если да - в этом и зарыта собака.
        Ответить
        • С чего? list же ссылки хранит.
          Ответить
        • Нет. Объекты создаются и добавляются корректно. Я проверял на примере messagebox.
          Проблема в том, что эти объекты не хотят корректно добавляться в listview.
          lst := ListView4.items.Add;
                keyname := format('%s\%s\%s', [tregobj.Rootkeyname,tregobj.keyname, tregobj.param]);
                lst.Caption :=keyname;
                lst.SubItems.AddObject(tregobj.value,tregobj);


          в то же время код
          showmessage(tregkey(rlist[i]).keyname)


          работает нормально.
          Ответить
          • Бля если честно, за это я и полюбил Делфи. Можно как угодно извращаться с объектами. Иной раз кажется, что решения нет -а оно вот, оно.
            Вот и доизвращался.
            Ответить
            • >Бля если честно, за это я и полюбил Делфи. Можно как угодно извращаться с объектами

              Может попробуешь на нем кодить, а не извращаться?
              Ответить
        • В этом и есть. Если свойство OwnsObjects=true, то объекты будут удаляться при Free\Delete.
          Ответить
        • Даже если и фришит, это не должно вызвать проблем.
          Принцип то в чем - тупо скопировать каждый объект из листа в listview.subitems, потом очистить лист.

          Или я не прав?
          Ответить
          • Ну вот если список ебашит элементы на free, то он их всех переудаляет, а указатели в listview станут ссылаться на мусор. Поэтому есть смысл попробовать убрать rlist.Free.
            Ответить
            • Я в шоке. Т.е. при копировании объекта, копируется только ссылка - я их маму, бля ебал?!!
              Ответить
              • > при копировании объекта, копируется только ссылка
                Ну да, все эти потомки TObject'а передаются по ссылке. Из-за этого ты и делаешь им Create и Free каждый раз.

                Вобщем-то ничего особо нового тут нет. В жабе, шарпе, да и в куче других языков все точно так же (ну только что Free не надо, ибо сборщик).
                Ответить
              • Для языки с ручным управлением памятью-блядей это - срыв шаблона?
                Ответить
              • >Я в шоке. Т.е. при копировании объекта, копируется только ссылка - я их маму, бля ебал?!!

                ultimate_palmface.pdf
                Ответить
          • Все как я и думал: If the OwnsObjects property is set to true (the default), TObjectList controls the memory of its objects, freeing an object when its index is reassigned; when it is removed from the list with the Delete, Remove, or Clear method; or when the TObjectList instance is itself destroyed. Лист ебашит все что в нем было, когда ему делают Free.

            Для фикса попробуй добавить rlist.OwnsObjects := false сразу после создания (rlist := tobjectlist.create). Должно помочь.
            Ответить
            • Опус про ссылки серьезно меня озадачил. А как тогда освобождать ресурсы? Допустим, создал я список tstringlist, поработал с ним, так потом же в любом случае освобождать нужно - и это вызовет изменение объектов, которые в нем находились? Или так себя ведет только tobjectlist?
              Ответить
              • Я х.з. как себя ведет TStringList. Почитай ман или умные книжки ;) У меня о делфе в основном остаточные знания.
                Ответить
                • Теория - полная лажа.

                  Тогда можно еще один вопрос? Допустим, если удалять элемент из списка - удалится ли объект с ним связанный?
                  Ответить
                  • > Допустим, если удалять элемент из списка - удалится ли объект с ним связанный?
                    Из TObjectList'а походу да: TObjectList controls the memory of its objects, freeing an object when its index is reassigned; when it is removed from the list with the Delete, Remove, or Clear method; or when the TObjectList instance is itself destroyed..

                    > Теория - полная лажа.
                    Но без нее никак. Учись читать маны. Не всю же жизнь вопросы задавать будешь.
                    Ответить
                    • The TStringList object does not own the objects you add this way. Objects added to the TStringList object still exist even if the TStringList instance is destroyed. They must be explicitly destroyed by the application.


                      Я уже подумываю, может, я зря связался с программированием?
                      Ответить
                      • Переходи на языки со сборкой мусора - по крайней мере, таких проблем в них нет.
                        Ответить
                        • Не указывай мне, сопляк.
                          Ответить
                          • Бля ты кретин, не хочешь - не буду тебе ничего советовать, ебись дальше.
                            Ответить
                            • Пошел на хуй, урод.
                              Ответить
                              • Свистни в хуй.
                                Ответить
                                • Анонимб, не позорься.
                                  >>Переходи на языки со сборкой мусора - по крайней мере, таких проблем в них нет.

                                  Хорошо ты мне советуешь, нечего сказать. Это значит, я должен бросить все проекты на Делфи и срочно начать учить сишку? А вот хуй.
                                  Ответить
                                  • Тогда ебись дальше.
                                    Ответить
                                  • Тогда лови баги с памятью сам, я тебе ничем помочь не могу, да и не хочу.

                                    Как будто тебе дофига проектов надо поддерживать.
                                    Ответить
                                    • всего навсего 1 проект, но я работаю над ним уже лет 5.
                                      Ответить
                      • > The TStringList object does not own the objects you add this way.
                        Вот поэтому у тебя с ним все работало.

                        > Я уже подумываю, может, я зря связался с программированием?
                        Ну хз, тебе решать.
                        Ответить
                        • Я бросаю хохмы и троллинг и срочно начинаю учить справку.
                          Ответить
                          • > учить справку
                            Не, лучше скачай какую-нибудь хорошую книжку по делфи для начинающих. Будет полезнее ;)

                            А справку лучше читать уже по месту, когда надо найти конкретную инфу про конкретный класс. Она у билдера\делфи юзабельна только как справочник.
                            Ответить
                            • >Она у билдера\делфи юзабельна только как справочник.

                              у любого языка так.
                              Ответить
                              • > языка
                                Ты хотел сказать либы?

                                Сравни вот с этой справкой: http://qt-project.org/doc/qt-5.0/qtwidgets/qwidget.html#details. По ней вполне можно понять что к чему безо всяких книжек: вводные статьи, примеры, типичные косяки, отсылки к похожим классам...

                                В MSDN, имхо, тоже хорошо оформлено. Ну и java, конечно, отстает, но у нее тоже вполне приличные доки.

                                А в билдере/делфи... посмотреть список функций, и почитать 2-3 строчки по функции и 5-6 строчек по классу. Хер че поймешь по этим описаниям, все тонкости придется гуглить или у кого-то выспрашивать. Хотя, после того как ее продали эмбаркадере, стало получше.
                                Ответить
                                • >Ты хотел сказать либы?

                                  и у либы тоже. Но язык важнее либы ибо без знаний языка все рано не уедешь

                                  >В MSDN, имхо, тоже хорошо оформлено.

                                  не совсем. иногда в статье просто капитанское описание без примеров и тонкостей. MSDN не учебник. это красивая справка, но учить по ней шарпик глупо. Троелсен же есть

                                  > посмотреть список функций, и почитать 2-3 строчки по функции и 5-6 строчек по классу. Хер че поймешь по этим описаниям, все тонкости придется гуглить или у кого-то выспрашивать.

                                  а у Окси как, тяжелое наследие?
                                  Так с любым языком. Все равно приходиться кодить с гуглом периодически
                                  Ответить
                                • не знаю как сейчас, но раньше все толстые книжки по дельфям были суть переведенная справка со скриншотами (у меня когда-то была такая за авторством Архангельского)
                                  Ответить
                          • >учить справку

                            Удачи. Хотя я думаю что тебе для начала неплохо было бы прочитать энциклопедию профессора фортрана
                            Ответить
                      • Борманд, но как же тогда заполнять листвью?
                        Если удалить все объекты из списка, это будет невозможно. Оставить тоже нельзя - утечка памяти.
                        Ответить
                        • Ну я же писал выше: Для фикса попробуй добавить rlist.OwnsObjects := false сразу после создания (rlist := tobjectlist.create). Должно помочь. Этим кодом ты отключишь автоудаление объектов.

                          Ну а потом, когда будешь удалять элементы из листвью, надо будет фришить прицепленные к ним TRegKey, чтобы не было утечки.

                          P.S. Учись читать доки и книжки: без них будешь тыкаться как слепой котёнок, и все грабли соберешь на свою жопу.
                          Ответить
                          • Да там примеров нет никаких. Я уже разобрался, спс большое! )

                            По-моему, меня нужно забанить и с позором изгнать. Чужие-то коды я обсмеивал, а сам даже с объектами не смог разобраться. (
                            Ответить
                            • там в справке примеров нет никаких. Но я уже разобрался, спс большое! )


                              Ситуация такая. При вызове метода addobject выделяется некоторое 
                              количество памяти, которое НЕ ОСВОБОЖДАЕТСЯ при удалении самого 
                              контейнера,  и она [память] доступна по ссылке.  Возникает аналогия с 
                              рамкой-шаблоном в песочнице: играя, дети вдавливают ее в песок, и 
                              получают разные фигуры: треугольник, квадрат и цилиндр. Потом могут 
                              прийти другие дети и изменить созданные ранее фигуры, или даже затоптать
                               их. 
                              
                              Я провел эксперимент:
                              
                              procedure TForm1.Button1Click(Sender: TObject);
                              var
                                i:integer;
                                lst:tstringlist;
                                str:string;
                                s:tololo;
                                ls:tlistitem;
                                begin
                                lst:=tstringlist.Create;
                                for i:=1 to 1000000 do
                                begin
                                s:=tololo.Create;
                                
                              s.str:='4353450980re9treoitoeriutoeriutoierutoiureoterotueroituoeriutfkdjhgkdfjhgkfdjhgkdfjg';
                              
                                lst.AddObject(s.str,s);
                                end;
                                for i:=lst.count -1 downto 0 do
                                begin
                                  //application.ProcessMessages; не используем
                                  ls:=listview1.items.add;
                                  ls.Caption:=tololo(lst.Objects[i]).str;
                                  ls.SubItems.AddObject('jkh',tololo(lst.Objects[i]));
                                end;
                                lst.Free;
                              
                              end;
                              
                              procedure TForm1.Button2Click(Sender: TObject);
                              var
                              i:integer;
                              begin
                                for i:=listview1.items.Count -1 downto 0 do
                                begin
                                  listview1.Items[i].SubItems.Objects[0].Free;
                                  listview1.items[i].Delete;
                                end;
                              end;
                              
                              Память освобождается, что говорит о том, что код работает правильно.
                              Ответить
                              • Можно ли сделать так:

                                try
                                    for i := rlist.Count - 1 downto 0 do
                                      try
                                         tstrlst.AddObject(tmyclass(rlist[i]).Name,tmyclass(rlist[i]));
                                       except
                                        tmyclass(rlist[i]).Free;
                                      end;
                                    rlist.Clear;
                                    for i:= tstrlst.Count-1 downto 0 do
                                      rlist.Add(tmyclass(tstrlst.Objects[i]));
                                
                                      tstrlst.Clear;
                                      tstrlst.Free;
                                
                                
                                
                                      form1.ListView3.Items.BeginUpdate;
                                      form1.ListView3.Clear;
                                
                                    for i := rlist.Count - 1 downto 0 do
                                    begin
                                
                                      ftype := TMyclass(r


                                rlist у меня tthreadlist.

                                Не будет ли это ошибкой? Я сам генерирую исключение, но сам же и обрабатываю его.
                                Ответить
                                • Начал детальное исследование моей программы на утечки памяти с помощью FastMM. В принципе, все не так плохо. Инди же меня вообще убила - вся дырявая.
                                  Ответить
                  • >Теория - полная лажа.

                    обещай мне, что никогда не будешь осквернять мой любимый шарпик написанием кода на нем. Обещай
                    Ответить
                    • Ты любишь шарпик, я люблю делфи, о чем нам говорить. Извечный спор сишника и дельфина.

                      Кстати, я и на билдере сиплюсном одно время кодил, у которого иконка с панельными многоэтажками, обломись.
                      Ответить
                      • >Кстати, я и на билдере сиплюсном одно время кодил

                        и что? Я как то раз во сне трахнул королеву англии, так что, теперь ко мне "Ваше величество" обращаться?
                        Ответить
                        • Уууу, как ты наверно ее ебал - искры летели.

                          Простыню сам стирал, или мамке сплавил?
                          Ответить
                    • Как будто от этого количество ГК на шарпике поменяется.
                      Ответить

    Добавить комментарий