Delete[]fName
in decode()
导致此错误, delete
in encode()
工作正常.如果没有那个 delete
,每次新调用 decode()
都会导致多浪费 1 MB,这在意料之中,购买为什么添加 delete
会导致崩溃,但不在 encode()
中? MAX_STRING_LENGTH
常量是 1048576
(1 MB 的字符)
void encode()
{
char* usrChars = new char[MAX_STRING_LENGTH];
memset(usrChars, 0, MAX_STRING_LENGTH);
cin.get();
cin.getline(usrChars, MAX_STRING_LENGTH);
ofstream f("E:/fc/enc_test.txt");
//do stuff
f.close();
delete[]usrChars; //works fine
decode();
cout << endl;
}
void decode()
{
char* fName = new char[MAX_STRING_LENGTH];
memset(fName, 0, MAX_STRING_LENGTH);
fName = "e:/fc/enc_test.txt";
ifstream f(fName);
delete[]fName; //causes crash
//do stuff
}
最佳答案
decode
崩溃而 encode
没有崩溃的原因是因为您正试图删除一个不是用 new
分配的指针。您确实分配了 new
开始,但是当您执行 fName = "e:/fc/enc_test.txt";
时,您将 fname
更改为指向字符串文字而不是您最初分配的内存。在那之后尝试删除它就是你崩溃的原因。
您应该将编译器上的警告设置为
fName = "e:/fc/enc_test.txt";
应该是一个错误,因为 "e:/fc/enc_test.txt"
的类型是 const char[]
并且您不能将它分配给一个字符*
。
关于c++ - Delete[]操作符使*.exe触发断点出现未加载的wntdll.pdb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43126265/