我的代码如下:
#include <vector>
int main() {
std::vector<int> *vec;
vec->push_back(1);
return 0;
}
无论我使用哪个编译器尝试该程序都会出现段错误。我也尝试过使用智能指针,但它也会出现段错误。我现在有两个问题:
vector
(特别是智能指针)的指针是否有意义?在我的网上搜索中,我只看到了相反的情况,是 vector
的 unique_ptr
。哪个更有意义,为什么?指针是普通对象,因此默认初始化指针的结果是其值不确定。由于这就是您所做的,因此您的指针没有指向任何东西。这意味着尝试访问它指向的东西会导致未定义的行为。
您需要创建一个对象供指针指向。例如,您可以动态分配
new std::vector<int>
:
std::vector<int>* vec = new std::vector<int>;
vec->push_back(1); // fine
delete vec; // dynamically-allocated, so you have to delete it when you're done with it
不过基本上没有理由这样做。
std::vector
本质上已经只是一个指向动态分配数组的指针,加上一些额外的元数据来存储数组的大小。动态分配 std::vector
而不是在本地声明它(或作为某个类的数据成员等)的合理理由很少:
std::vector<int> vec;
vec.push_back(1);