0

当我尝试执行一个调用我的方法的程序时,我得到一个分段错误(核心转储),但我只是看不到错误。我犯了某种菜鸟错误吗?

#include<map>
#include<vector>
//#include<iostream>
//#include<algorithm>
using namespace std;

template <class T>
class Record{
   public:
      T item;
      int total;
};

template <class T>
class Counter{
   public:
      map<T, int> m;

void printSummary(){

      typename map<T, int>::const_iterator itr; 
      vector< Record<T> > printlist;
      int i = 0;

      for( itr = m.begin(); itr != m.end(); ++itr ){
         printlist[i].item = (*itr).first;
         printlist[i].total = (*itr).second;
         i++;
      }
4

2 回答 2

1

printlistvector执行以下行时为空:

printlist[i].item = (*itr).first;
printlist[i].total = (*itr).second;

这会导致越界访问,导致未定义的行为,在这种情况下是分段错误。使用push_back()或创建vector具有所需数量的元素并保持for循环不变:

vector< Record<T> > printlist(m.size());
于 2013-04-13T11:35:39.223 回答
0

您可以访问

printlist[i]

只有当向量有足够的元素时。您可以使用另一个地图来获取具有随机访问权限的容器。

于 2013-04-13T11:40:46.440 回答