#include <iostream>
using namespace std;
const int ALPHABET = 26;
const int LANG = 4;
const double TOLK[LANG][ALPHABET]= {{0}};
class Text
{
private:
string sample;
int* histogram;
double* rel_histogram;
int sample_size;
public:
Text();
~Text();
string parse();
};
string parsing(const double TOLK[][ALPHABET], double rel_occurence_arr[]);
int main()
{
Text myText;
myText.parse();
return 0;
}
Text::Text(){
sample = "";
histogram = new int[ALPHABET];
rel_histogram = new double[ALPHABET];
sample_size = 0;
}
Text::~Text(){
delete[] histogram;
delete[] rel_histogram;
}
string Text::parse(){
parsing(TOLK, rel_histogram);
//Invalid pointer here
}
string parsing(const double TOLK_HJALP[][ALPHABET], double rel_occurence_arr[]){
return "test";
}
Это часть большого кода, но я очистил все, что мог, пока остались только части, вызывающие ошибку. Его запуск приводит к ошибке неверного указателя, а запуск со всеми дополнительными битами приводит к двойной ошибке освобождения / повреждения. Но я думаю, что если я смогу понять это на этом уровне, я, вероятно, смогу понять это в более широком масштабе.
Из того, что я собрал, я думаю, что класс Text пытается удалить то, что уже было удалено, когда функция синтаксического анализа вернулась. Я не знаю, правильно ли это, но если это так, я понятия не имею, как это предотвратить. Не имеет значения, отправляю ли я копию (как я пытался, может быть, есть больше способов, чем один?).
Кроме того, удаление iostream из списка включений, по какой-либо причине, устраняет ошибку. Это почему? Это даже не используется здесь?
Заранее спасибо.