C++ 动态内存分配导致SIGSEGV(信号:分段冲突),试图使用malloc和free
我正在用c++20(Mingw-w64 clion)创建一个数学数据结构,由于它的容量和大小,我可以部分地从内存卸载到存储,反之亦然。在学习如何使用内存时,我测试了一个据我所知应该可以使用的特定代码。但由于分段冲突(SIGSEGV),应用程序崩溃,我无法推断原因。我非常感谢你的帮助C++ 动态内存分配导致SIGSEGV(信号:分段冲突),试图使用malloc和free,c++,malloc,new-operator,dynamic-memory-allocation,static-memory-allocation,C++,Malloc,New Operator,Dynamic Memory Allocation,Static Memory Allocation,我正在用c++20(Mingw-w64 clion)创建一个数学数据结构,由于它的容量和大小,我可以部分地从内存卸载到存储,反之亦然。在学习如何使用内存时,我测试了一个据我所知应该可以使用的特定代码。但由于分段冲突(SIGSEGV),应用程序崩溃,我无法推断原因。我非常感谢你的帮助 //实用程序 样板 std::基本_ostream& 运算符您不能简单地将void*指针强制转换为指向logic\u sym的指针。必须使用placement new运算符来初始化内存 new(pointer) lo
//实用程序
样板
std::基本_ostream&
运算符您不能简单地将void*
指针强制转换为指向logic\u sym
的指针。必须使用placement new运算符来初始化内存
new(pointer) logic_sym(26)
然而,你为什么要忙于malloc
和free
而不是仅仅使用new
和delete
?`请显示逻辑符号的定义。@b我已经编辑了这个问题,以包括逻辑符号的定义。我能得到一些帮助吗。你不能对那个类使用malloc
,因为它有一个需要运行的构造函数。@1201程序我用*pointer=logic\u sym(26)调用了这个构造函数代码>,还有什么原因可以解释为什么test2()
工作得很好?。千万不要低估他隐藏错误的技能。我怀疑我以前听说过新操作员的位置。请提供参考建议?@D.Sikilai
struct logic_sym final : public atomic_logic {
[[nodiscard]] constexpr bool cached() const override {
return false;
};
[[nodiscard]] const logic_id &get_id() const override {
return id;
}
[[nodiscard]] constexpr logic_type get_type() const override {
return logic_type::sym_t;
}
constexpr int operator<=>(const logic_id &_id) const override {
return id - _id;
}
[[nodiscard]] std::string to_string() const override {
if (id > 26)
return (std::string("p") + std::to_string(id));
return (std::string() + ((char) (id + 'a' - 1)));
}
[[maybe_unused]] explicit logic_sym(const logic_id &id) {
std::cout << "Aha! creating: " << id << std::endl;
this->id = id;
}
logic_sym(const logic_sym &orig)=delete;
private:
logic_id id;
};
new(pointer) logic_sym(26)