C++ 它会导致内存泄漏吗?
我写了这段代码:C++ 它会导致内存泄漏吗?,c++,windows,memory,memory-leaks,C++,Windows,Memory,Memory Leaks,我写了这段代码: string getWinTitle(HWND hwnd){ const int MAX_LENGTH = 1000; wchar_t title[MAX_LENGTH]; ZeroMemory(title, MAX_LENGTH); GetWindowText(hwnd, (LPWSTR)title, MAX_LENGTH); char* buffer = new char[MAX_LENGTH]; wcstombs(buffer, title, MAX_LENGTH); s
string getWinTitle(HWND hwnd){
const int MAX_LENGTH = 1000;
wchar_t title[MAX_LENGTH];
ZeroMemory(title, MAX_LENGTH);
GetWindowText(hwnd, (LPWSTR)title, MAX_LENGTH);
char* buffer = new char[MAX_LENGTH];
wcstombs(buffer, title, MAX_LENGTH);
string res = buffer;
return res;
}
这里有内存泄漏吗?
我需要释放ZeroMemory分配的内存吗?
我是否需要显式释放为缓冲区分配的内存
谢谢您需要
删除[]缓冲区代码>因为它是新[]
分配的
用0填充内存块,它不进行任何内存分配
另外,作为旁注,既然您正在处理wchar\u t
数组,为什么不使用std::wstring
编辑以演示
string getWinTitle(HWND hwnd){
const int MAX_LENGTH = 1000;
wchar_t title[MAX_LENGTH];
ZeroMemory(title, MAX_LENGTH);
GetWindowText(hwnd, (LPWSTR)title, MAX_LENGTH);
char* buffer = new char[MAX_LENGTH];
wcstombs(buffer, title, MAX_LENGTH);
string res = buffer;
delete [] buffer; // You must do this, otherwise this is a memory leak if buffer is never deleted
return res; // res's data is copied from buffer, it is not affected by you doing delete [] buffer
}
避免内存分配
由于您没有使用依赖于运行时值的分配大小,因此可以使用堆栈分配数组:
string getWinTitle(HWND hwnd){
const int MAX_LENGTH = 1000;
wchar_t title[MAX_LENGTH];
ZeroMemory(title, MAX_LENGTH);
GetWindowText(hwnd, (LPWSTR)title, MAX_LENGTH);
//char* buffer = new char[MAX_LENGTH];
char buffer[MAX_LENGTH]; // this is on the stack
wcstombs(buffer, title, MAX_LENGTH);
string res = buffer;
return res;
} // buffer is automatically cleaned up
+1@Michaels:如果这个答案对你有足够的帮助,请接受它。或者,只需在堆栈中定义buffer
,而不必完全处理内存管理。David,如何在堆栈中定义buffer?@michaels123-wchar\t title[MAX\u LENGTH]代码>在堆栈上创建标题
。在堆栈上,基本上意味着不使用动态内存分配。对于您来说,您可以执行char buffer[MAX_LENGTH]
,因为您没有依赖于运行时某些内容的数组大小。Ok。我懂了。。。wcstombs是否分配内存并返回指向它的指针?我想确保我的函数不会返回指向随后被释放的内存的指针…。