为什么我不能将元素推回到向量指针中? [已关闭]

问题描述 投票:0回答:1

我的代码如下:

#include <vector>

int main() {
    std::vector<int> *vec;
    vec->push_back(1);
    return 0;
}

无论我使用哪个编译器尝试该程序都会出现段错误。我也尝试过使用智能指针,但它也会出现段错误。我现在有两个问题:

  • 为什么以及如何解决这个问题?
  • 拥有指向
    vector
    (特别是智能指针)的指针是否有意义?在我的网上搜索中,我只看到了相反的情况,是
    vector
    unique_ptr
    。哪个更有意义,为什么?
c++ pointers vector segmentation-fault smart-pointers
1个回答
3
投票

指针是普通对象,因此默认初始化指针的结果是其值不确定。由于这就是您所做的,因此您的指针没有指向任何东西。这意味着尝试访问它指向的东西会导致未定义的行为。

您需要创建一个对象供指针指向。例如,您可以动态分配

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);
© www.soinside.com 2019 - 2024. All rights reserved.