You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何访问堆分配vector的内存?代码报错求解决

问题:C++代码中vector部分报错,无法输出元素值

以下代码中数组部分运行正常,但vector部分报错,如何修改让vector部分输出500?

#include <iostream>
#include <vector>
using std::vector;

#define log(x) std::cout << x << "\n"

int main() {
    // array
    {
        int* array = new int[1];
        array[0] = 400;
    
        log( array[0] << "\nArray\n" );
        delete array;
    }
    
    // vector
    {
        vector<int>* vec = new vector<int>();    
        vec->push_back( 500 );
        
        log ( vec[0] << "\nVector");
        delete vec;
    }
    return 0;
}

错误原因

  • vec是指向单个vector<int>对象的指针,并非指针数组。vec[0]等价于*vec,直接对vector对象使用<<会触发编译错误(没有匹配的ostream重载),且代码里的vec[0] << "\nVector"属于非法操作,试图将字符串插入vector,这是不允许的。
  • 要访问vector中的元素,必须先解引用指针得到vector对象,再通过下标或at()方法访问元素。

修正方案

修改vector部分的输出语句,先解引用指针获取vector对象,再访问其第一个元素,以下三种写法都可行:

写法1:解引用后用下标访问

// vector
{
    vector<int>* vec = new vector<int>();    
    vec->push_back( 500 );
    
    log( (*vec)[0] << "\nVector");
    delete vec;
}

写法2:直接调用vector的operator[]

log( vec->operator[](0) << "\nVector");

写法3:使用更安全的at()方法(越界会抛出异常)

log( vec->at(0) << "\nVector");

另外补充:数组部分的delete array存在内存泄漏隐患,因为是用new[]分配的数组,应该使用delete[] array来释放内存。

内容的提问来源于stack exchange,提问作者Tyler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:22:43