обновление : ошибка сегментации все еще существует после исправления malloc(sizeof(500))
Я сталкиваюсь с ошибкой сегментации в следующем коде:
#include <iostream>
#include <vector>
#include <functional>
struct Data {
std::string name;
std::function<int()> work;
std::vector<int*> v1 {nullptr, nullptr, nullptr, nullptr};
std::vector<int*> v2 {nullptr, nullptr, nullptr, nullptr};
int* v3 {nullptr};
int* v4 {nullptr};
};
int main() {
std::cout << sizeof(Data) << "\n"; // Just to make sure sizeof(Data) < 500
auto raw = malloc(500); // Allocate memory
auto int_ptr = static_cast<int*>(raw);
int_ptr ++;
auto ptr = reinterpret_cast<Data*>(int_ptr);
new (ptr) Data(); // GDB reports segmentation fault here
free(raw);
}
Команда компиляции:
clang++-9 -std=c++14 -stdlib=libc++ -ggdb3 prog.cpp -lc++abi -O2
Я думаю, что память должна быть достаточно большой, чтобы хранить Data
, но почему в new
?
происходит ошибка сегментации