push_back期间std :: vector分段错误

米哈尔·哈比吉(MichałHabigier)

我有一个名为book的类,其中包含书。

#ifndef BOOK_H
#include<string>
#include<vector>
#include<iostream>
#define BOOK_H
class book
{
public:
    std::string Author, Title;
    int Year;
    book(){}
    book(std::string author, std::string title, int year);
    ~book(){}
    void add_book();
    std::vector<book*>library;
};  
#endif

book.cpp文件

#include "book.h"

book::book(std::string author, std::string title, int year)
:Author(author), Title(title), Year(year){} 

void book::add_book()
{
    int y;
    std::string a, t;
    std::cin>>a;
    std::cin>>t;
    std::cin>>y;
    library.push_back(new book(a, t, y));
}

但是,当我想向book库中添加push_back新对象时,在main.cpp文件中新对象的处理过程中出现了段错误

#include "book.h"

int main()
{
    book* ptr;
    ptr->add_book();
    return 0;
}

有人可以向我解释一下问题是什么吗?

我是OOP的新手,尽管我在这里阅读了很多文章,但仍然找不到解决方案。

尼尔

您不初始化ptrin main;

int main()
{
    book* ptr = new book(); // initialize it here
    ptr->add_book();
    return 0;
}

这将修复段错误,但是,我不确定与示例代码关联的逻辑以及可能的内存泄漏。


我希望将类型librarybook类型分开,以更好地组合并避免堆分配;

#include<string>
#include<vector>
#include<iostream>

class book
{
public:
    std::string Author, Title;
    int Year;
    book(){}
    book(std::string author, std::string title, int year) : Author(author), Title(title), Year(year) {} 
    ~book(){}
};  

struct library {
    std::vector<book> books_;
    void add_book(const book& value) { books_.push_back(value); }
};

int main()
{
    library lib;
    int y;
    std::string a, t;
    std::cin>>a;
    std::cin>>t;
    std::cin>>y;
    lib.add_book(book(a, t, y));
    return 0;
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

从std :: vector删除时出现分段错误

来自分类Dev

从std :: vector删除时出现分段错误

来自分类Dev

push_back上的STL列表分段错误

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

OpenMP 并行区域中的 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

std :: vector析构函数中的分段错误

来自分类Dev

初始化std :: vector <double>时出现分段错误

来自分类Dev

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

来自分类Dev

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

来自分类Dev

错误:没有匹配的函数调用vector :: push_back

来自分类Dev

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

来自分类Dev

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

来自分类Dev

C ++ std :: vector可以同时处理来自多线程的push_back吗?

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

    从std :: vector删除时出现分段错误

  12. 12

    从std :: vector删除时出现分段错误

  13. 13

    push_back上的STL列表分段错误

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

    std :: vector析构函数中的分段错误

  23. 23

    初始化std :: vector <double>时出现分段错误

  24. 24

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

  25. 25

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

  26. 26

    错误:没有匹配的函数调用vector :: push_back

  27. 27

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

  28. 28

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

  29. 29

    C ++ std :: vector可以同时处理来自多线程的push_back吗?

热门标签

归档