问题
做单元测试的时候遇到一个奇怪的问题
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