I create an on-heap array in class A
and then create a thread_local A
object. Accessing on-heap storage via A
causes a segfault, why?
#include <chrono>
#include <iostream>
#include <memory>
#include <thread>
#include <vector>
class A {
public:
A() {
std::cout << ">>>> constructor >>>>" << std::endl;
a = new int[10];
}
~A() {
std::cout << ">>>> destructor >>>>" << std::endl;
delete[] a;
}
void set(int x) { a[0] = x; }
int get() const { return a[0]; }
private:
int* a;
};
int main() {
std::thread t1;
{
thread_local A t;
t1 = std::thread([]() {
t.set(1);
std::cout << t.get() << std::endl;
});
}
t1.join();
std::cout << ">>>> main >>>>" << std::endl;
}
Result:
>>>> constructor >>>>
Segmentation fault (core dumped)