На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Решить проблему утечки памяти в циклической функции. , Borland C++ Builder v.6.0.
    Самописная функция разбития строки в TStringList. TStringList делается только методом New - при каждом вызове память расходуется.

    Было решение: объявить TStringList глобальным - и просто очищать в теле функции. Работало долго - но в одной из программ (именно в одной) заглючило: при повторном вызове функции разрушаются данные в том TStringList, который был возвращен предыдущим вызовом.

    Как решить проблему NEW в теле функции - при условии, что функция должна именно возвращать TStringList?

    ExpandedWrap disabled
      TStringList * _fastcall TForm_Main::slSplit(const AnsiString asString, const AnsiString asSeparator) //В билдере отсутствует функция Split.
      {
          AnsiString asTemp_Local = "";
       
          for (int iTemp=0; iTemp<asString.Length(); iTemp++) asTemp_Local = asTemp_Local + asString.SubString(iTemp+1,1); //Чтобы не портить саму вызываемую asString.
          //StrCopy(asTemp_Local.c_str(), asString.c_str()); //Эта дрянь не работает на длинных строках, разрушая память, - эту ошибку искал часов 5.
       
          char *cString = asTemp_Local.c_str(), *cTok = NULL;
          const char *cSeparator = asSeparator.c_str();
          [B]TStringList *slResult = new TStringList;[/B]
       
          for (cTok = strtok(cString, cSeparator); cTok; cTok = strtok(NULL, cSeparator)) slResult->Add(Trim((AnsiString)cTok));
       
          return slResult;
      }
    Сообщение отредактировано: Сергей85 -
      "объявить TStringList глобальным" - единственное решение.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0161 ]   [ 16 queries used ]   [ Generated: 4.03.24, 21:59 GMT ]