+ -
当前位置:首页 → 问答吧 → 求教一个关于vector的问题!!

求教一个关于vector的问题!!

时间:2011-11-29

来源:互联网

我编了一段根据文法产生LR(0)预测分析表的程序,但是运行的时候总出现错误,最后查到是一个vector莫名其妙的从vector.size=5变成了3万多。。。实在不知道是什么原因额。。求教啊!

以下是那个vector的声明:
vector<string> follow;//存储follow集合

程序调试报错是在这个函数中报错的:

void checkReduce(vector<string> handle,int cur)
{
if(cur==19)
cur=cur; //作为程序断点,我时循环调用这个程序的,在cur=19之前vector还是5,19的时候就成35790了
int sizeH=handle.size()-1;
int sizetest=follow.size();
for(int i=0;i<=sizeH;i++)
{
int sizeS=handle[i].size()-1;
string tp=handle[i];
if(handle[i][sizeS]=='^')
{
if(handle[i][0]=='U')
{
for(int h=0;Action[0][h].s!=36;h++)
;
string test=handle[i];
Action[cur+1][h].act='a';
Action[cur+1][h].s=0;
}
else
{
  int pos=findf(handle[i][0]);
sizetest=follow.size();
string temp=follow[pos];
int size1=temp.size()-1;
for(int j=1;j<=size1;j++)
{
for(int h=0;Action[0][h].act!=temp[j];h++)
;
string s="";
int size0=handle[i].size()-1;
for(int y=0;y<=size0;y++)
{
if(handle[i][y]!='^')
s+=handle[i][y];
}
size0=formula.size()-1;
sizetest=follow.size();
for(y=0;y<size0;y++)
if(formula[y]==s)
break;
Action[cur+1][h].act='r';
  Action[cur+1][h].s=y;
}
sizetest=follow.size();
}
}
}
}


这个程序是用来给预测分析表产生归约项的。。。关键是这个程序里面都没怎么用到follow这个vector《string》的,就是在调用函数findf的时候遍历了follow。。。

这个是那个函数。。很简单的遍历,不像有什么错额。
int findf(char ch)
{
int size=follow.size()-1;

for(int i=0;i<=size;i++)
{
if(follow[i][0]==ch)
return i;
}
return -1;
}

求教。。

作者: dzwjobs   发布时间: 2011-11-29

支持 很好

作者: suyksuyk   发布时间: 2011-11-29

LZ是不是最后一个for没加大括号{}啊?
帮顶

作者: yzr8963818   发布时间: 2011-11-29

引用 2 楼 yzr8963818 的回复:
LZ是不是最后一个for没加大括号{}啊?
帮顶


哦 那个是我没粘贴上~ 呵呵

作者: dzwjobs   发布时间: 2011-11-29