当我推_Tp
类型的对象回到std::vector
,段故障信号产生SIGSEGV
围绕下面的代码片断的端部,其中template new_allocator<_Tp>
回报:怪异段故障::矢量
pointer
allocate(size_type __n, const void* = 0)
{
if (__n > this->max_size())
std::__throw_bad_alloc();
return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); /* SEGMENT FAULT! */
}
持续监控关于下面的表达式产量
(this->max_size()) = 1343857
(__n) = 4
(sizeof(_Tp)) = 3196
__n * sizeof(_Tp) = 12784
我可以告诉内存显然是足够的,所有寄存器都很好。
但是,这个段的故障DID不会发生,直到推了几次,因为我认为矢量最初大到足以推动没有::operator new
直到现在。但是,只要有return static_cast<_Tp *>(::operator new(__n * sizeof(_Tp)))
,就会发生不好的事情。
尽管如此,关于_Tp
的一个事实是它确实是一个没有DEFAULT CONSTRUCTOR的类实现,因为它具有某个引用类型的成员字段,并且不能默认构造它。根据static_cast<_Tp *>
和operator new
(全局原创,未在我的代码中被覆盖)的语义,这可能与段错误有关吗?我应该为自己实现一个_Tp类型的分配器还是有其他解决方法而感到困扰?谢谢。
随着
Ubuntu 12.04 x86-64, GCC 4.6.3, IDE Netbeans 7.4, std=C++98
这是你在那里的一个巨大的类,但没有默认的构造函数会在编译时出现问题。 – chris