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

正确使用vector指针:程序崩溃问题排查与正确用法

问题原因与解决方法

你的程序崩溃的核心原因是:指针a1没有被初始化,属于野指针。

你只定义了std::vector<std::vector<int>> *a1;,但没有让这个指针指向一个实际存在的vector对象。此时a1指向的是内存中随机的非法地址,直接调用a1->push_back(a)相当于往不属于你的内存区域写数据,必然触发崩溃。

两种修复方案

方案1:给指针分配堆内存(手动管理生命周期)

用new创建一个vector对象,让指针指向它:

std::vector<int> a;
// 初始化指针,指向堆上的vector实例
std::vector<std::vector<int>> *a1 = new std::vector<std::vector<int>>();
a.push_back(3);
a1->push_back(a);
cout<<" value is: "<<(*a1)[0][0] + 4 <<endl;
// 用完后必须释放内存,避免泄漏
delete a1;

方案2:直接使用栈上的vector对象(推荐,无需手动管理内存)

如果没有必须用指针的场景,直接定义vector对象更安全:

std::vector<int> a;
std::vector<std::vector<int>> a1; // 直接创建栈上对象,不用指针
a.push_back(3);
a1.push_back(a);
cout<<" value is: "<<a1[0][0] + 4 <<endl;

补充说明

你看到其他用户用vector指针但没写数据的情况,大概率是他们的指针已经指向了一个已存在的vector对象(比如指向栈上的对象、函数参数传入的对象,或者已经用new分配好的堆对象),而不是像你这样使用未初始化的野指针。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:57:20