当我运行代码时,它给了我一个错误,我已经触发了一个断点。它没有告诉我这个断点在哪里。有人可以帮忙吗?
void memLeak()
{
int *p = new int;
char * string1 = new char[20];
char * string2 = new char[25];
strcpy(string1, "Sheldon");
string2 = string1;
delete string2;
delete string1;
delete p;
}
int main(int argc, char* argv[])
{
memLeak();
_CrtDumpMemoryLeaks();
return 0;
}
答案 0 :(得分:0)
new
时,请使用delete
。new[]
时,请使用delete[]
。即,数组都有单独的版本。
delete[] string2;
delete[] string1;
delete p;
string2 = string1
时,您将丢失指向第二个字符串的原始指针,并尝试删除第一个字符串两次。这种双重删除很可能导致断点错误。但更好的是,使用std::string
,不要担心直接使用new
/ delete
。