C++中以下代码编译通过,但是运行中却提示string subscript out of range 不知道为什么?

该程序为利用哈弗曼编码文件内的内容
/*头文件myh.h*/
/*cpp文件*/

#include <iostream>
#include<fstream>
#include<string>
#include <stdlib.h>
#include "myh.h"
using namespace std;

void builthaff(int count[],int a,char chs[])
{
HaffNode *myHaffTree = new HaffNode[2*a];
Code *myHaffCode = new Code[a];
if(a > MaxN-1)
{
cout << "定义的n越界,修改MaxN! " << endl;
exit(0);
}
Haffman(count, a+1, myHaffTree);
HaffmanCode(myHaffTree, a+1, myHaffCode);
//输出每个叶结点的哈夫曼编码
for(int ir = 0; ir <= a; ir++)
{
cout<<"字符"<<chs[ir]<<"的权值为:"<<count[ir]<<"\t该符号编码为:";
for(int jr = myHaffCode[ir].start+1; jr <= a; jr++)
cout << myHaffCode[ir].bit[jr];
cout << endl;
}
cout<<endl;
cout<<"........................................................................"<<endl<<endl;
string des;
cout<<"请输入要编码的字符串:";
cin>>des;
cout<<endl;
int desc=des.size ();
int mycount=0;
int b[40];
for(int g=0;g<desc;g++)
{
for(int h=0;h<a;h++)
{
if(chs[h]==des[g])
{
for(int jr = myHaffCode[h].start+1; jr < a; jr++)
{
cout << myHaffCode[h].bit[jr];
b[mycount]=myHaffCode[h].bit[jr];
mycount++;
}
}
}
}

}

int main()
{
fstream f1;
f1.open ("m.txt");
char ch[30];
string s;
getline(f1,s);
int counts[30]={0} ,i=s.size (),n=0;
ch[0]=s[0];
if(ch[0]!=NULL)
{ counts[0]++;
for(int m=1;m!=i;m++)
{
int flag=0;
for(int j=0;j<=n;j++)
{
if(ch[j]==s[m]){flag=1;counts[j]++; break; }
}
if(flag==0) { n++;ch[n]=s[m];counts[n]++;}
}
cout<<endl<<"总字符数为:"<<i<<endl;
}
else
cout<<"文件中没有内容!"<<endl;
builthaff(counts,n,ch);
return 0;
}
求改!!!!!!!!!!!!!!!

帮你测试了下,

代码呢写得实在不容易懂,至少搞些注释,良好的习惯还是很重要的。

改的地方只有一个看图。

结果呢,可以显示,如果你还有别的错误,具体再指出来。

追问

能够运行但点击exe文件时出现

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-25
字符数组下标越界,修改范围本回答被提问者采纳
相似回答
大家正在搜