>>105681089 (OP)segfault with smart pointers
example1
#include <iostream>
#include <memory>
struct B; // Forward declaration
struct A {
std::shared_ptr<B> b_ptr;
~A() { std::cout << "A destroyed\n"; }
};
struct B {
std::shared_ptr<A> a_ptr;
~B() { std::cout << "B destroyed\n"; }
};
int main() {
auto a = std::make_shared<A>();
auto b = std::make_shared<B>();
a->b_ptr = b;
b->a_ptr = a;
// Manual attempt to dereference potentially invalid pointers (not needed for leak, but for crash demonstration)
a.reset(); // Normally would destroy A, but A is held by B
b.reset(); // Normally would destroy B, but B is held by A
std::cout << "Done\n";
// At this point, A and B are not destroyed due to circular reference
// Now simulate later use-after-free or memory pressure causing crash
// (Not guaranteed here, but common in real-world circular reference misuse)
return 0;
}
example 2
#include <iostream>
#include <memory>
struct Test {
void say_hello() { std::cout << "Hello from Test\n"; }
~Test() { std::cout << "Test destroyed\n"; }
};
int main() {
std::unique_ptr<Test> ptr1 = std::make_unique<Test>();
// Transfer ownership to ptr2
std::unique_ptr<Test> ptr2 = std::move(ptr1);
// Now ptr1 is null; dereferencing it causes a segmentation fault
ptr1->say_hello(); // Segfault: ptr1 is nullptr
return 0;
}