2013-05-26 3 views
0

я пытаюсь сделать код производителя Шеннона из входного текста, и у меня есть некоторые проблемы ...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; 
} 

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

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

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

+2

'delete mass;' is undefined behavior. Еще одна причина, по которой такие вещи, как 'std :: vector', более безопасны. – chris

+0

Да, спасибо! –

ответ

5

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

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

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

 

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

delete [] mass; 
     ^^ 

 

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

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

 

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

+0

"есть другой код" !? Urrrgh. https://twitter.com/tinkertim/status/266476654887583745 – sehe

+0

pardon, я олень) –

+0

это работает, спасибо очень-очень!) –