首页 > 其他分享 >为什么实例化class报错segmentation fault而指针不会

为什么实例化class报错segmentation fault而指针不会

时间:2022-12-13 15:24:58浏览次数:76  
标签:segmentation fault class 报错 Evaluator stack 指针

问题

做单元测试的时候遇到一个奇怪的问题

class Evaluator
{
public:
    explicit Evaluator(){};
    // ...
}

Evaluator eval; // segmentation falut
std::unique_ptr<Evaluator> eval_ptr = std::make_unique<Evaluator>(); // OK

只要调用构造函数函数就会报错,而智能指针则没有问题。

思考

考虑到生产代码中确实是用智能指针进行构造,想必两种构造方式有区别。
从字面意思理解segmentation falut表示程序访问了不该访问的内存,常见于空指针或越界。
可能是Evaluator的长度过大,超过了stack的上限进而产生错误,验证一下。
果然sizeof(Evaluator)的返回值高达9450736妥妥stack overflow越界。
使用指针初始化产生heap中的匿名变量,对应stack仅存储一个长整数代表的地址因此不会溢出。

参考

C++ variables and where they are stored in memory (stack, heap, static) - Stack Overflow

标签:segmentation,fault,class,报错,Evaluator,stack,指针
From: https://www.cnblogs.com/azureology/p/16978914.html

相关文章