如何处理非法地址删除

Dav*_*yan 0 c++ exception-handling exception new-operator

假设我们有这样的情况.假设不是"p =&global;"而是 我们调用了一些函数(由某人编写,使我们的指针无效).怎么处理这个问题?如何保护代码免受崩溃?我知道并使用boost智能指针.但是如果我们遇到这种情况该怎么办

struct Test
{
    int a;
    int b;
    int c;
};

Test global;

int main()
{
    Test *p = new Test;

    p->a = 1;
    p->b = 2;
    p->c = 3;

    p = &global;

    delete p;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 17

您可以通过修复错误并重新编译程序来处理它.其他任何事都没有意义.


Geo*_*che 9

你不能,你不应该试图处理这种情况,然后不要让它发生在一开始.
C++中有一些基本规则必须遵守.


Ecl*_*pse 5

没有.如果你这样做,那么你得到你得到的.不要这样做.

重新分配后p,泄漏最初指向的Test对象p.你现在已经在这个应用程序的运行时间内丢失了内存.然后,当您删除非堆对象时,您将遇到未定义的行为,并且任何事情都可能发生(通常运行时库将崩溃尝试删除非堆内存 - 但您无法保证).一旦你试图删除非堆内存,你就无法做到可靠.

您已经提到了智能指针,这是解决方案的一部分.另一部分只是小心.