Char * перераспределение в C ++ - PullRequest
1 голос
/ 29 апреля 2010

Мне нужно хранить определенное количество данных в "char *" в C ++, потому что я хочу избежать превышения памяти std :: string при превышении max_size (). Но данные поступают в блоки данных из сети, поэтому мне нужно использовать перераспределение каждый раз, когда я получаю блок данных. Есть ли элегантное решение для перераспределения и объединения символов в C ++?

Ответы [ 3 ]

3 голосов
/ 29 апреля 2010

В визуальной студии max_size () составляет 4294967294 символа, примерно 4 ГБ. Было бы интересно, если бы вы могли рассказать нам, как вы рискуете превысить это количество символов.

Если проблема возникает не часто и речь идет только об отказоустойчивости, тогда

 myConcatStr(string str1, string str2)
 {
      if (str1.length() + str2.length()) <= str1.max_size() // if there is no overflow problem
           str1.append(str2); // use stl append
      else
           //use alternate method instead or throw an exception
 }
2 голосов
/ 29 апреля 2010

Вы можете пойти по пути C и использовать malloc() / realloc(), но realloc() просто выделит новый блок, скопирует старый материал в новый материал и освободить старый блок иногда в любом случае. Также это трудно правильно использовать.

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

Или вы можете использовать веревки .

1 голос
/ 29 апреля 2010

std: вектор приходит на ум для автоматического выделения при увеличении размера строки. Просто выделите символы Vector<char> и push_back () для вашего сердца.

...