C++中调用vector指针的push_back方法触发段错误的原因是什么
段错误原因分析
- 你声明的
std::vector<string> *data是未初始化的裸指针,C++不会为声明的裸指针自动分配对应类型的实例内存,此时该指针指向的内存地址是随机的、不属于当前进程的合法可写区域,属于典型的野指针。 - 代码中直接调用
data->push_back(word),本质是尝试操作随机内存地址上不存在的vector对象,属于非法内存访问,操作系统会触发SIGSEGV信号,也就是你遇到的段错误。 - 当你修改为栈上的普通对象
std::vector<string> data时,编译器会自动在栈空间为该vector实例分配内存、调用默认构造函数完成初始化,后续调用push_back操作的是合法的已初始化对象,因此可以正常运行。
如果你确实需要使用指针实现该逻辑,需要先为指针分配合法的实例内存:
// 手动new出vector实例 std::vector<string> *data = new std::vector<string>();
注意手动new的对象需要在使用完毕后手动调用delete data释放内存,避免出现内存泄漏,生产环境更推荐使用智能指针管理堆内存。
内容的提问来源于stack exchange,提问作者user3235916
相关产品推荐
相关产品推荐

