Вы должны использовать управление ресурсами с привязкой к области (также известное как RAII), это хорошая практика в любом случае.Никогда не выделяйте память вручную, храните ее в автоматически выделенном классе, который очистит ресурс для вас в деструкторе.
Ваш код может выглядеть следующим образом:
while(!quit)
{
// completely safe, no leaks possible
std::vector<char> thebuffer(210);
int size = FuncToObtainInputTextFromApp(&thebuffer[0]);
// you never used size, this should be better
string bufferstring(thebuffer, size);
// find does not return an int, but a size_t
std::size_t startlog = bufferstring.find("$");
std::size_t endlog = bufferstring.find("&");
// why was this split across two lines?
// there's also no checks to ensure the above find
// calls worked, be careful
string str_text = bufferstring.substr(startlog, endlog - startlog + 1);
// why copy the string into a String? why not construct
// this directly?
String^ str_text_m = gcnew String(str_text_m.c_str());
// ...
// don't really need to do that, I think,
// it's garbage collected for a reason
// delete str_text_m;
}
Дело в том, что вы выигралиутечки памяти, если вы уверены, что ваши ресурсы освобождены сами по себе.Возможно, сборщик мусора вызывает сбои в работе вашего детектора утечек.
Кстати, в вашем коде слишком много ненужного копирования, вам может понадобиться переосмыслить, сколько раз вы копируете строку.(Например, найдите "$"
и "&"
, пока он находится в векторе, и просто скопируйте оттуда в str_text
, нет необходимости в промежуточной копии.)