如何使用指向vector的指针收集用户输入的double并打印?(代码段错误)
问题分析与修正方案
错误原因
- 代码中声明的
vector<double>* b是未初始化的野指针,它没有指向任何合法的vector对象,而是指向内存中的随机地址。 - 调用
b->push_back(i)时,程序会尝试通过这个野指针操作内存,属于非法内存访问,直接触发段错误。
正确实现方案
方案一:直接使用vector对象(推荐,无需指针)
#include<iostream> #include<vector> using namespace std; int main() { vector<double> b; for (double i; cin >> i;) { b.push_back(i); } for (double j : b) { cout << j << endl; } return 0; }
直接定义vector对象,避免指针带来的野指针问题,代码更简洁安全,也不需要手动管理内存。
方案二:使用指针并正确初始化
如果一定要用指针,必须为其分配合法的内存空间,使用完后记得释放:
#include<iostream> #include<vector> using namespace std; int main() { vector<double>* b = new vector<double>(); for (double i; cin >> i;) { b->push_back(i); } for (double j : (*b)) { cout << j << endl; } delete b; // 释放动态分配的内存,防止内存泄漏 return 0; }
内容的提问来源于stack exchange,提问作者Naghi
相关产品推荐
相关产品推荐

