malloc(): corrupted top size в конструкторе
Вот такой вот конструктор класса world, все замечательно работает, если num_countries < 5, если же >=, то возникает ошибка при попытке выделить память на пятой итерации цикла for для toler_matrix[i].
world::world(int t, int c, std::string filename1, std::string filename2, double* rts)
{
num_takts = t;
num_countries = c;
std::ofstream output1(filename1);
std::ofstream output2(filename2);
toler_matrix = new double*[num_countries];
desire_matrix = new double*[num_countries];
throughput_matrix = new double*[num_countries];
flow_matrix = new double*[num_countries];
countries.reserve(num_countries);
for (int i = 0; i < num_countries; i++){
toler_matrix[i] = new double[num_countries];
desire_matrix[i] = new double[num_countries];
throughput_matrix[i] = new double[num_countries];
flow_matrix[i] = new double[num_countries];
countries.emplace_back(i, c, rts[i]);
}
UpdateEveryMatrix();
SaveInformation(output1, output2, 0);
for (int i = 0; i < num_takts; i++){
std::cout << "TAKT" << i << std::endl;
Migration();
for (int i = 0; i < num_countries; i++){
countries[i].StepForward();
}
UpdateEveryMatrix();
SaveInformation(output1, output2, i + 1);
output1.close();
output2.close();
}
Вот так класс выглядит
class world
{
private:
std::vector <country> countries;
double** toler_matrix; //матрица толерантности
double** desire_matrix; //матрица желания жить в стране
double** throughput_matrix; //матрица пропускных способностей
double** flow_matrix; //матрица потоков
int num_takts; //число тактов
int num_countries; //число стран
void Migration();
void UpdateEveryMatrix();
void SaveInformation(std::ofstream & file1, std::ofstream & file2, int x);
public:
world(int num_countries, int num_takts, std::string filename1, std::string filename2, double* rts);
~world();
};
Источник: Stack Overflow на русском