Test Project.exe触发了断点

时间:2017-02-04 23:06:04

标签: c++ memory breakpoints

当我运行代码时,它给了我一个错误,我已经触发了一个断点。它没有告诉我这个断点在哪里。有人可以帮忙吗?

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;
}

1 个答案:

答案 0 :(得分:0)

  • 使用new时,请使用delete
  • 使用new[]时,请使用delete[]

即,数组都有单独的版本。

delete[] string2;
delete[] string1;
delete p;
  • 当您指定string2 = string1时,您将丢失指向第二个字符串的原始指针,并尝试删除第一个字符串两次。这种双重删除很可能导致断点错误。

但更好的是,使用std::string,不要担心直接使用new / delete