<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=423533&amp;view=findpost&amp;p=3865487</guid>
        <pubDate>Tue, 10 May 2022 08:39:38 +0000</pubDate>
        <title>Решить проблему утечки памяти в циклической функции.</title>
        <link>https://forum.sources.ru/index.php?showtopic=423533&amp;view=findpost&amp;p=3865487</link>
        <description><![CDATA[Сергей85: &quot;объявить TStringList глобальным&quot; - единственное решение.]]></description>
        <author>Сергей85</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=423533&amp;view=findpost&amp;p=3852903</guid>
        <pubDate>Mon, 11 Oct 2021 15:57:29 +0000</pubDate>
        <title>Решить проблему утечки памяти в циклической функции.</title>
        <link>https://forum.sources.ru/index.php?showtopic=423533&amp;view=findpost&amp;p=3852903</link>
        <description><![CDATA[Сергей85: Самописная функция разбития строки в TStringList. TStringList делается только методом New - при каждом вызове память расходуется.<br>
<br>
Было решение: объявить TStringList глобальным - и просто очищать в теле функции. Работало долго - но в одной из программ (именно в одной) заглючило: при повторном вызове функции разрушаются данные в том TStringList, который был возвращен предыдущим вызовом.<br>
<br>
Как решить проблему NEW в теле функции - при условии, что функция должна именно возвращать TStringList?<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">TStringList * _fastcall TForm_Main::slSplit(const AnsiString asString, const AnsiString asSeparator) //В билдере отсутствует функция Split.</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;AnsiString asTemp_Local = &quot;&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (int iTemp=0; iTemp&#60;asString.Length(); iTemp++) asTemp_Local = asTemp_Local + asString.SubString(iTemp+1,1); //Чтобы не портить саму вызываемую asString.</div><div class="code_line">&nbsp;&nbsp; &nbsp;//StrCopy(asTemp_Local.c_str(), asString.c_str()); //Эта дрянь не работает на длинных строках, разрушая память, - эту ошибку искал часов 5.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char *cString = asTemp_Local.c_str(), *cTok = NULL;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const char *cSeparator = asSeparator.c_str();</div><div class="code_line">&nbsp;&nbsp; &nbsp;[B]TStringList *slResult = new TStringList;[/B]</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (cTok = strtok(cString, cSeparator); cTok; cTok = strtok(NULL, cSeparator)) slResult-&#62;Add(Trim((AnsiString)cTok));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return slResult;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Сергей85</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      </channel>
      </rss>
	