【发布时间】:2016-11-11 15:28:43
【问题描述】:
我在以下代码中遇到分段错误,任何人都可以麻烦解释一下。我认为这可能与初始化有关,但不确定。我只是试图克隆现有堆栈并执行操作,例如向克隆添加条目或从现有堆栈中删除条目并将其克隆到新堆栈。
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <deque>
#include <string>
using namespace std;
#define in cin
#define out cout
int main()
{
//ifstream in("postfix.in");
//ofstream out("postfix.out");
int n;
in>>n;
long sum=0;
vector<int> tm(0);
vector<vector<int>> ar(0,tm);
//ar[0].push_back(0);
out<<ar[0][0];
for(int i=0;i<n;i++)
{
int ind,val;
in>>ind>>val;
if(val==0)
{
for(int j=0;j<ar[ind-1].size();j++)
ar[i].push_back(ar[ind-1][j]);
ar[i].pop_back();
}
else
{
for(int j=0;j<ar[ind-1].size();j++)
ar[i].push_back(ar[ind-1][j]);
ar[i].push_back(val);
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<ar[i].size();j++)
sum+=ar[i][j];
}
out<<sum<<endl;
return 0;
}
【问题讨论】:
-
你调试了吗?
-
#define in cin #define out cout-- 请停止这样做。这只会让阅读代码的人更加困惑——每个 C++ 程序员都知道cin和cout是什么,而不会被#define宏隐藏。 -
我正在使用#define 语句,因为我必须先在控制台中对其进行测试,然后才能将其与文件流一起使用,这只是为了方便,我只是将原始代码粘贴在这里,抱歉。
-
@Carcigenicate 我正在使用没有任何调试工具的 gnu g++。
-
@shubhamrock828 你不需要调试器来调试。您可以放置打印语句来隔离问题,然后打印出代码的关键部分进行分析。
标签: c++ vector segmentation-fault