#include <iostream>
class MyClass {
public:
int* data;
MyClass() : data(new int(42)) {}
~MyClass() {
delete data;
}
};
int main() {
MyClass obj1;
MyClass* obj2 = new MyClass();
// Dangling Pointer Scenario 1
int* danglingPtr1 = obj1.data; // Pointing to memory that has been deleted
delete obj2; // obj2 is deleted, and danglingPtr1 becomes a dangling pointer
// Dangling Pointer Scenario 2
int* danglingPtr2 = obj2->data; // Pointing to memory that has been deleted
delete obj2; // obj2 is deleted, and danglingPtr2 becomes a dangling pointer
// Attempting to dereference dangling pointers (undefined behavior)
// Uncommenting the next lines may lead to unpredictable results.
// std::cout << *danglingPtr1 << std::endl;
// std::cout << *danglingPtr2 << std::endl;
return 0;
}