测试 Project.exe 已触发断点
Test Project.exe has triggered a breakpoint
当我 运行 代码时,它给我一个错误,我触发了一个断点。它没有告诉我这个断点在哪里。有人可以帮忙吗?
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;
}
- 当你使用
new
时,使用delete
。
- 当你使用
new[]
时,使用delete[]
。
也就是说,数组都有不同的版本。
delete[] string2;
delete[] string1;
delete p;
- 当您分配
string2 = string1
时,您正在丢失指向第二个字符串的原始指针,并试图两次删除第一个字符串。很可能是这个 double-delete 导致了断点错误。
但更好的是,使用 std::string
,不用担心自己直接使用 new
/delete
。
当我 运行 代码时,它给我一个错误,我触发了一个断点。它没有告诉我这个断点在哪里。有人可以帮忙吗?
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;
}
- 当你使用
new
时,使用delete
。 - 当你使用
new[]
时,使用delete[]
。
也就是说,数组都有不同的版本。
delete[] string2;
delete[] string1;
delete p;
- 当您分配
string2 = string1
时,您正在丢失指向第二个字符串的原始指针,并试图两次删除第一个字符串。很可能是这个 double-delete 导致了断点错误。
但更好的是,使用 std::string
,不用担心自己直接使用 new
/delete
。