C++ 释放内存中的访问
我发现了一个奇怪的问题,在访问释放的内存时并没有运行时错误C++ 释放内存中的访问,c++,memory,delete-operator,C++,Memory,Delete Operator,我发现了一个奇怪的问题,在访问释放的内存时并没有运行时错误 class Test { public: Test(int idx) : c(idx) {} ~Test() { std::cout << "destructor\n"; } void Delay() { Sleep(500); std::cout << "delay " << c << "\n"; } protected: int c; }
class Test {
public:
Test(int idx) : c(idx) {}
~Test() {
std::cout << "destructor\n";
}
void Delay() {
Sleep(500);
std::cout << "delay " << c << "\n";
}
protected:
int c;
};
int _tmain(int argc, _TCHAR* argv[])
{
for (int idx = 0; idx < 100; idx++) {
Test* test = new Test(idx);
Test*temp = test;
delete test; test = NULL;
temp->Delay();
}
std::cout << "Exit\n";
Sleep(1000);
return 0;
}
类测试{
公众:
Test(intidx):c(idx){
~Test(){
std::cout发生这种情况是因为运气不好。您正在使用无效指针调用未定义的行为。您不一定会发生运行时错误,也不一定会发生任何事情。它是未定义的
它不会崩溃的实际原因是Delay()
关于IsBadReadPtr
,展示一些代码来演示您正在谈论的内容。但请记住IsBadReadPtr
是操作系统级调用,而new
和delete
是语言结构。正如您不能将new
和free
混合使用一样,您不能依赖之间的互操作性>新建
/删除
和IsBadReadPtr
编辑:我说运气不好是因为你的代码有严重的问题,但由于偶然的机会,它是看不见的。如果应用程序崩溃,暴露出错误,运气会更好