Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory leaks 具有功能的内存泄漏_Memory Leaks - Fatal编程技术网

Memory leaks 具有功能的内存泄漏

Memory leaks 具有功能的内存泄漏,memory-leaks,Memory Leaks,___当在“delete p”和“p=NULL”之后调用MyClass::processing时,下面的程序应该会崩溃,但当尝试访问“MyClass::a”时,它会崩溃。为什么会这样 #include <iostream> using namespace std; class MyClass { public: int a; void processing() { cout<<"Proces

___当在“delete p”和“p=NULL”之后调用MyClass::processing时,下面的程序应该会崩溃,但当尝试访问“MyClass::a”时,它会崩溃。为什么会这样

#include <iostream>
using namespace std;

class MyClass
{
public:
        int a;
        void processing()
        {
                cout<<"Processing"<<endl;
        }
};

int main(void)
{
        MyClass* p(new MyClass);
        MyClass* q = p;
        p->a = 10;
        cout<<"p:: "<<p<<" q:: "<<q<<endl;
        cout<<"p->a"<<p->a<<"q->a"<<q->a<<endl;
        delete p;
        p->processing();   // Watch out! p is now dangling!
        cout<<"\n\nAfter Deletion::"<<endl;
        cout<<"p:: "<<p<<" q:: "<<q<<endl;
        cout<<"p->a"<<p->a<<"q->a"<<q->a<<endl;
        p = NULL;           // p is no longer dangling
        cout<<"\n\nAfter Assigning null"<<endl;
        p->processing();   // Watch out! p is now dangling!
        q->processing();   // Ouch! q is still dangling!
        cout<<"p:: "<<p<<" q:: "<<q<<endl;
}
#包括
使用名称空间std;
类MyClass
{
公众:
INTA;
无效处理()
{

cout删除实例后调用方法是未定义的行为。任何情况都可能发生

可能的行为示例:

  • 您得到了“幸运”:
    free
    刚刚释放了内存,但没有使其失效。实例部分完好无损,调用意外成功
  • free
    用垃圾(或sentinel值)覆盖内存,导致您跳转到某个疯狂的地址并出错
  • free
    取消分配整个块,您在尝试访问
    *p
    时会出错
  • 其他一些线程将
    系统
    的地址放在现在未使用的内存块中。堆栈恰好包含一个指向
    “rm-rf/”
    的指针。硬盘被擦除,欢闹随之发生
  • 永远,永远,永远不要依赖未定义的行为