我有內存泄漏檢測器的工具,它告訴我下面代碼正在泄漏100個字節由strcpy設置的釋放char *上的內存泄漏?
#include <string>
#include <iostream>
void setStr(char ** strToSet)
{
strcpy(*strToSet, "something!");
}
void str(std::string& s)
{
char* a = new char[100]();
setStr(&a);
s = a;
delete[] a;
}
int main()
{
std::string s1;
str(s1);
std::cout << s1 << "\n";
return 0;
}
根據this點編號3是漏水的"something!"
(10)予分配的量(100)減去長度和我應該泄漏90個字節。
我在這裏丟失了什麼東西,或者安全地假定該工具報錯?
編輯:setStr()
是在一個庫中,我看不到代碼,所以我猜想它是這樣做的。它可能是它在堆上分配"something!"
,那麼情況如何?我們會有90字節泄漏還是100?
隨着代碼顯示你沒有內存泄漏。 –
此外,您要麼泄漏*全部*或分配,或*無*。您不能泄漏部分分配。 –
爲什麼'SetStr'不採用'char *'? – patatahooligan