所以这是一个简单的类 A 的实现,它将公共 int 变量 x 分配给 10。然后我创建一个指向 A 的指针并调用 run() 函数来打印整数 x 和一个字符串。然后删除指针后,我再次调用 run() 函数。
我的代码:
#include <iostream>
class A {
public:
A() = default;
~A() = default;
int x = 10;
void run() {
std::cout << x << std::endl;
std::cout << "pointer to class A" << std::endl;
}
};
int main() {
A *ptr_a = new A();
ptr_a->run();
delete (ptr_a);
ptr_a->run();
}
输出:
10
pointer to class A
-1664078719
pointer to class A
我接受了分段错误,但它以某种方式给了我一个输出,其中整数 x 是某个随机值(可能是由于内存释放),但字符串输出仍然相同。
我认为指针位于堆栈中,指向分配字符串的堆分配内存。删除指针后,它释放内存,以便其他人可以访问它,但仍然指向它,因此字符串输出是相同的。但从这个意义上说,整数 x 发生了什么?
有人可以详细解释一下幕后发生的事情吗?
删除指针使指针无效,但不一定将其设置为
nullptr
。因此,这种未定义行为的一个完全可以接受的结果是它继续像以前一样工作。