我正在尝试从输入文本制作一个Shannon代码制作者,我有一些麻烦......
所以,有一些简单的狗屎码
int main()
{
string x="this is very big text.";
int temp;
int N = x.length();
int *mass = new int [N];
然后计算文本中的符号;
然后计算从ASCII表中使用的符号;
使用符号和符号计数器创建新的2个群体,但它们的维度相当小;
按delete mass;
通过计数器排序并计算其累积概率;
double * cumulative = new double (k);
double temp=int_mass[0];
cumulative[0]=0;
for (int i=1; i<k; i++)
{
temp=int_mass[i-1];
cumulative[i]=cumulative[i-1]+temp/N;
}
cout'ing all 3 massives
double a,b,n;
n=N;
for (int i=0; i<k; i++)
{
b=int_mass[i];
b/=n;
cout<<char_mass[i]<<" ";
cout<<b<<" "; //**__**__**
cout<<cumulative[i]<<endl;
}
所以,我有一些麻烦。 如果文本很小,那么我会在praogram终止时捕获未处理的异常。 如果文字很大,大约有100多个符号,我在 __ ** __ 时有例外。
你有什么建议,为什么会这样?
对不起大代码,这是我第一次提交StackOverFlow。
答案 0 :(得分:5)
使用[]
代替()
到new
阵列:
double * cumulative = new double [k];
^ ^
(k)
只需在内存中创建一个位置并将其初始化为k
,而不是创建大小为k
的数组。
使用[]
删除数组:
delete [] mass;
^^
您正在使用k
,但我无法看到您初始化它的位置?!
for (int i=0; i<k; i++)
最好使用std::vector
而不是自定义数组来避免上述问题。