C ++ программа умирает с помощью std :: bad_alloc, НО valgrind сообщает об отсутствии утечек памяти - PullRequest
3 голосов
/ 08 декабря 2010

Моя программа завершается с ошибкой 'std :: bad_alloc'. Программа является масштабируемой, поэтому я протестировал ее на уменьшенной версии с использованием valgrind и утечек памяти не было.

Это приложение статистической механики, поэтому я в основном делаю сотни объектов, изменяю их внутренние данные (в данном случае векторы удваивается) и записываю в файл данных. Создание объектов лежит внутри цикла, поэтому, когда оно заканчивается, память свободна. Что-то вроде:

for (cont=0;cont<MAX;cont++){
         classSection seccion;
         seccion.GenerateObjects(...);
         while(somecondition){
                seccion.evolve();
                seccion.writedatatofile();
         }}

Таким образом, есть две переменные, которые устанавливают время вычисления программы, размер системы и количество запусков. Существует сбой только для больших систем с большим количеством прогонов. Любые идеи о том, как поймать эту проблему с памятью?

Спасибо,

Ответы [ 2 ]

3 голосов
/ 08 декабря 2010

valgrind не будет показывать утечку памяти, потому что у вас может не быть той, которую найдет valgrind.

На самом деле, у вас могут быть утечки памяти в таких языках сборки мусора, как Java.Хотя память там очищается, это не означает, что плохой программист не может бесконечно хранить данные, которые им больше не нужны (например, создавать хэш-карту бесконечно).Сборщик мусора не может определить, что пользователю больше не нужны эти данные.

Возможно, вы делаете что-то подобное здесь, но нам нужно увидеть больше вашего кода.

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

3 голосов
/ 08 декабря 2010

Запустите программу из-под отладчика, чтобы она остановилась при возникновении исключения и вы могли наблюдать за стеком вызовов.

Три наиболее вероятные проблемы:

...