У меня странная проблема с кодом, который я запускаю; Сложность в том, что он не мой, а довольно большой код с различными функциями и заголовками,
быстрый факт
1.) Работает на моем компиляторе машины Ma c: Apple clang версия 11.0 .0
2.) Сбои на моем Unix компьютере с g cc 6.3.0 или выше
Отладка:
При использовании инструмента gdb cra sh происходит по простой строке std :: string line = ""; С ошибкой: «report free (): неверный следующий размер (нормальный): ... ;»
Как я уже сказал, код огромен, но позвольте мне попытаться дать некоторые специфика. Это происходит в функции
void read_data(std::string filename, number_type & impact_parameter, number_type & n_participants, number_type & multiplicity){
std::ifstream infile(filename);
std::string line="";
size_type counter_numbers = 0;
size_type counter_lines = 0;
while (infile)
{
std::getline(infile, line); // Read in current line
and so on...
Файлы, которые читаются, имеют формат:
# event 0
# b = 10.63639744
# npart = 95
and so on...
Он будет читать через вторую строку current = 10.63639744, а затем, переходя на следующую строку, вылетает,
*** Error in `./MultB': free(): invalid next size (normal): 0x0000000001fb9760 ***
Буду очень признателен за помощь в этом. Это проблема компилятора (Macchiato vs Unix) или что-то с этим можно сделать,
спасибо, Дамир
--------------- Обновление -------------------
Кажется, GDB не очень помог найти ошибку памяти в коде; Я разделил код на то, какая часть кода будет работать.
Опять же, не имея возможности опубликовать полный код (состоящий из множества заголовков и функций), кажется, что код фактически не будет иметь «проблемы с кучей», если в основном классе я отклоняю инициализацию некоторых переменных-членов / * stuff * /,
public:
.
.
, r_interpolators_(0)
, r_splines_(0)
, racc_(0)
, Nm_(128)
, Nr_(size_type(grid_max/grid_step))
, W_interpolators_(0)
, W_splines_(0)
, W_acc_(0)
, normalizations_(0)
/*{
// initialize grid sites
std::cout<<"GRID SIZE = "<<grid_size_<<std::endl;
x_sites_ = new number_type[grid_size_];
y_sites_ = new number_type[grid_size_];
r_sites_ = new number_type[Nr_];
R_ = grid_max_ - grid_step_;
for (size_type i = 0; i < grid_size_; ++i)
{
x_sites_[i] = x_from_index(i);
y_sites_[i] = -y_from_index(i);
r_sites_[i] = R_ * i / Nr_;
}
}*/
{}
~Collision(){}
Я добавил пустые скобки и деконструктор; Это не сообщит о проблеме с кучей памяти. Возможно, идея, почему «x_sites, y_sites» не очищены деконструктором?