我得到了下面一段代码,我已经缩小了内存泄漏的范围(即,在任务管理器中,专用工作集的内存随着相同的重复输入而增加串)。我理解堆和栈内存的概念,以及为避免内存泄漏的一般规则,但一些地方仍然会错误:在C++中识别内存泄漏
while(!quit){
char* thebuffer = new char[210];
//checked the function, it isn't creating the leak
int size = FuncToObtainInputTextFromApp(thebuffer); //stored in thebuffer
string bufferstring = thebuffer;
int startlog = bufferstring.find("$");
int endlog = bufferstring.find("&");
string str_text="";
str_text = bufferstring.substr(startlog,endlog-startlog+1);
String^ str_text_m = gcnew String(str_text_m.c_str());
//some work done
delete str_text_m;
delete [] thebuffer;
}
我能想到的唯一的事情是它可能是创造'string str_text',因为它从来没有超出范围,因为它只是在这段时间重新开放?如果是这样,我将如何解决?在while循环之外定义它并不能解决它,因为它也会保留在范围之内。任何帮助将不胜感激。
这不是C++,也就是C++/CLI。而在那个奇怪的混合。 – GManNickG 2010-06-16 20:27:03
这实际上是否会崩溃,最终呢?当你使用垃圾收集时,它可能只是使用可用内存来避免gc扫描。 – 2010-06-16 20:30:06
我不知道它是什么,但它不是'string str_text',它存在于堆栈中,因此您不必担心删除它。 – 2010-06-16 20:30:39