Я призываю вас выяснить, что, черт возьми, вызывает моя программа, я пытался найти причину этого, но я не смог найти ни малейшего кусочка.
МойПредполагается, что программа читает значения из файла и в зависимости от того, что она читает, создает 2 матрицы: первое значение в файле - это строки, а второе - столбцы.(Тогда он должен делать некоторые алгоритмы, но он работает просто отлично, до этого он не работал)
Так вот моя проблема: я продолжаю получать следующее сообщение об ошибке при запуске программы только , когда значение строки равно 30. Мне не удалось найти ни одного значения, которое приводит к этому сбою, кроме 30. Я хочу это исправить, но не могу найти причину сбоя программы с самого началаЯ не знаю, что еще попробовать.Я отладил его, и программа перестала работать при создании первой матрицы после прочтения всей информации из файла.
potter: malloc.c:2401: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Aborted (core dumped)
Самое смешное, что программа работала просто отлично перед добавлением последней функции.Я, должно быть, что-то изменил, не заметив и не сломав программу (у меня нет более старых версий, и удаление функции не помогает)
Вот ссылка на код дыры и тестовые файлы, если кому-то интересно:https://drive.google.com/open?id=1tcKXainj021fwjAAGN3cNdsU50p2Neou
Редактировать: Сбой программы в следующей части кода
M=new int * [n+1]
if(M){
for(int i=0; i<=n;i++){
M[i]=new int [T+1];
if(!M[i]){
cerr<<"Error";
exit(-1);
}
}
for(int i=0;i<n+1;i++)
for(int j=0;j<T+1;j++)
M[i][j]=-1;
}else{
cerr<<"Error";
exit(-1);
}
Конкретно при попытке сделать M [i] = new int [T + 1];когда я = 10 только , если n = 30
Решено
Проблема заключалась в том, что цикл выходил за пределы выделенной памяти, предварительно повреждая ее и вызывая сбой программыпотом.
decisions=new int [n];
for(int i=0;i<=n;i++)
decisions[i]=0;
Честно говоря, я не знаю, как программа провалилась, сделав что-то подобное.(Это было легко решено путем замены n на n + 1 в решениях = new int [n + 1];)