Я не знаю, что делать дальше ... безнадежно. Я устал догадываться о причинах сбоев. Недавно я заметил, что некоторые вызовы opengl аварийно завершают работу программ на некоторых картах GFS. поэтому я становлюсь действительно параноиком, что может вызвать сбои сейчас. Плохая вещь в этом сбое в том, что он падает только после длительного использования программы, поэтому я могу только догадываться, в чем проблема.
Я не могу вспомнить, какие изменения я внес в программу, которая могла вызвать сбои, это было так долго. Но, к счастью, предыдущая версия не дает сбоя, поэтому я могу просто скопировать немного кода и потратить 10 часов, чтобы увидеть, в какой момент он начинает падать ... Я не думаю, что хочу сделать это пока.
Программа аварийно завершает работу после того, как я заставляю ее обрабатывать одни и те же файлы около 5 раз подряд, каждый раз, когда она использует в процессе около 200 мегабайт памяти. Вылетает в случайное время во время и после процесса чтения.
Я создал «безопасную» функцию free (), она проверяет указатель, если он не равен NULL, а затем освобождает память, а затем устанавливает указатель на NULL. Разве это не так, как это должно быть сделано?
Я наблюдал за использованием памяти диспетчера задач, и непосредственно перед тем, как он рухнул, он начал кушать в 2 раза больше памяти, чем обычно. Также загрузка программы становилась экспоненциально медленнее каждый раз, когда я загружал файлы; Первые несколько нагрузок не казались намного медленнее друг от друга, но затем началось быстрое удвоение скорости загрузки. Что это должно сказать мне о катастрофе?
Кроме того, нужно ли вручную освобождать векторы c ++ с помощью clear ()? Или они освобождаются после использования автоматически, например, если я выделю вектор внутри функции, будет ли он освобождаться при каждом завершении функции? Я не храню указатели в векторе.
-
Коротко: я хочу научиться ловить этих чёртовых багов как можно быстрее, как мне это сделать? Использование Visual Studio 2008.