сбой — C ++ необработанное исключение. в чем дело?

я пытаюсь сделать создатель кода Шеннона из входного текста, и у меня есть некоторые проблемы …

Итак, есть простой дерьм-код

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 все 3 массива

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;
}

Итак, у меня есть некоторые проблемы.
если текст маленький, то я улавливаю необработанное исключение по окончании пограммы.
если текст большой, около 100+ символов, у меня есть исключение в __ ** __.

у вас есть предложения, почему это происходит?

извините за большой код, это мой первый коммит на StackOverFlow.

0

Решение

использование [] вместо () в new массивы:

double * cumulative = new double [k];
^ ^

(k) просто делает одно место в памяти и инициализирует его k вместо создания массива с размером k,

 

использование [] для удаления массивов:

delete [] mass;
^^

 

Вы используете k, но я не вижу, где вы его инициализировали ?!

for (int i=0; i<k; i++)

 

Лучше использовать std::vector вместо самоопределенных массивов, чтобы избежать вышеуказанных проблем.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]