std :: vector函数push_back中的奇怪段错误

Z

当我将类型的对象推_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
比利·奥尼尔

allocate在这种情况下,函数只是分配内存-尚未在该位置构造对象。它将全局运算符称为new,而不是您的类型的构造函数。然后它将使用new放置在结果存储块中构造您的对象。

如果您在这里遇到分段错误,则意味着内存不足,或者程序破坏了堆。损坏堆会导致未定义的行为,并且通常会在程序中从破坏它的位置崩溃得很远。可能最常见的原因是释放内存后使用内存。至少在使用free'd空间跟踪分配的系统上(例如dlmalloc,最常见的* nix分配器)。另一个常见原因是尝试注销以前由分配器处理过的缓冲区的末尾。

您不妨考虑在下运行该程序valgrind

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std :: vector中push_back函数的奇怪语法

来自分类Dev

std :: vector的push_back()导致奇怪的编译时错误消息

来自分类Dev

push_back期间std :: vector分段错误

来自分类Dev

std::vector<>::push_back 导致 Arduino 链接错误

来自分类Dev

在使用仅移动类型派生的类中定义析构函数时,使用std :: vector的emplace_back或push_back创建时会产生编译时错误

来自分类Dev

MSVC中std :: vector :: push_back的实现

来自分类Dev

MSVC中std :: vector :: push_back的实现

来自分类Dev

为什么要在std :: vector :: push_back(T object)方法中构造对象时调用析构函数?

来自分类Dev

调用std :: vector :: push_back()会更改vector中的先前元素吗?

来自分类Dev

调用std :: vector :: push_back()会更改vector中的先前元素吗?

来自分类Dev

为什么使用虚拟析构函数进行std :: vector :: push_back segfaults?

来自分类Dev

std vector push_back':2个重载没有针对“ this”指针错误的合法转换

来自分类Dev

AddressSanitizer将std :: vector <T> :: push_back标识为释放后使用堆错误的原因

来自分类Dev

OpenMP 并行区域中的 std::vector push_back 会导致错误共享吗?

来自分类Dev

std :: vector :: push_back的成本是成功还是无效?

来自分类Dev

关于`std :: vector :: push_back`的小数的选择

来自分类Dev

线程安全性std :: vector push_back并保留

来自分类Dev

OpenCV点的std :: vector,没有push_back方法

来自分类Dev

想要简化我的 std::vector push_back 用法

来自分类Dev

将指针数组推入std :: vector中,避免使用push_back复制对象

来自分类Dev

std :: vector <std :: vector <int >> push_back导致堆缓冲区溢出

来自分类Dev

在std :: vector push_back()和std :: map运算符中使用&&作为参数[]

来自分类Dev

使用push_back时,std :: unique_ptr是否已移入std :: vector?

来自分类Dev

std :: vector <std :: unique_ptr <>> :: push_back()的正确语法是什么?

来自分类Dev

同步push_back和std :: thread

来自分类Dev

向量:: push_back和std :: move

来自分类Dev

同步push_back和std :: thread

来自分类Dev

当push_back新元素添加到std :: vector时,C ++参考更改

来自分类Dev

为什么std :: vector :: push_back需要赋值运算符

Related 相关文章

  1. 1

    std :: vector中push_back函数的奇怪语法

  2. 2

    std :: vector的push_back()导致奇怪的编译时错误消息

  3. 3

    push_back期间std :: vector分段错误

  4. 4

    std::vector<>::push_back 导致 Arduino 链接错误

  5. 5

    在使用仅移动类型派生的类中定义析构函数时,使用std :: vector的emplace_back或push_back创建时会产生编译时错误

  6. 6

    MSVC中std :: vector :: push_back的实现

  7. 7

    MSVC中std :: vector :: push_back的实现

  8. 8

    为什么要在std :: vector :: push_back(T object)方法中构造对象时调用析构函数?

  9. 9

    调用std :: vector :: push_back()会更改vector中的先前元素吗?

  10. 10

    调用std :: vector :: push_back()会更改vector中的先前元素吗?

  11. 11

    为什么使用虚拟析构函数进行std :: vector :: push_back segfaults?

  12. 12

    std vector push_back':2个重载没有针对“ this”指针错误的合法转换

  13. 13

    AddressSanitizer将std :: vector <T> :: push_back标识为释放后使用堆错误的原因

  14. 14

    OpenMP 并行区域中的 std::vector push_back 会导致错误共享吗?

  15. 15

    std :: vector :: push_back的成本是成功还是无效?

  16. 16

    关于`std :: vector :: push_back`的小数的选择

  17. 17

    线程安全性std :: vector push_back并保留

  18. 18

    OpenCV点的std :: vector,没有push_back方法

  19. 19

    想要简化我的 std::vector push_back 用法

  20. 20

    将指针数组推入std :: vector中,避免使用push_back复制对象

  21. 21

    std :: vector <std :: vector <int >> push_back导致堆缓冲区溢出

  22. 22

    在std :: vector push_back()和std :: map运算符中使用&&作为参数[]

  23. 23

    使用push_back时,std :: unique_ptr是否已移入std :: vector?

  24. 24

    std :: vector <std :: unique_ptr <>> :: push_back()的正确语法是什么?

  25. 25

    同步push_back和std :: thread

  26. 26

    向量:: push_back和std :: move

  27. 27

    同步push_back和std :: thread

  28. 28

    当push_back新元素添加到std :: vector时,C ++参考更改

  29. 29

    为什么std :: vector :: push_back需要赋值运算符

热门标签

归档