2010-01-03 19 views
1

Я в основном работаю на языке C для своей работы. Я столкнулся со многими проблемами и потратил много времени на отладочные проблемы, связанные с динамическим распределением/перезаписи памяти. Как и malloc (A), байты, но используйте запись более A байтов. К тому, что я пытался прочитать несколько вещей, когда я читал о: -Связанные с памятью ошибки

1.) Подход, в котором каждый выделяет больше памяти, чем то, что необходимо. И напишите некоторое известное значение/шаблон в этих дополнительных местах. Затем во время выполнения программы этот шаблон должен быть нетронутым, иначе он указывает на повреждение/перезапись памяти. Но как этот подход работает. Означает ли это, что для каждой записи этому указателю, который выделяется с помощью malloc(), я должен делать чтение в памяти дополнительного шаблона часового пояса и читать его разумность? Это сделало бы мою программу очень медленной. И сказать, что мы можем удалить эти чеки из выпускной версии кода, также не является плодотворным, поскольку проблемы с памятью могут произойти больше в «реальном сценарии». Так можем ли мы справиться с этим?

2.) Я слышал, что есть что-то, называемое HEAP WALKER, которое позволяет программам обнаруживать проблемы, связанные с памятью? Как можно включить это.

спасибо.

-AD.

+3

92 вопроса, но принимаются только 18%? Почему это? –

ответ

0

Охранники памяти могут поймать кучу кучи. Он медленнее (особенно освобождение), но это просто для целей отладки, и ваша версия релиза не будет включать это.

Куча ходьбы является платформой, но не обязательно слишком полезна. Простейшая проверка состоит в том, чтобы просто обернуть ваши распределения и зарегистрировать их в файле с LINE и FILE информация для вашего режима отладки, и большинство любых утечек будет проявляться очень быстро, когда вы выходите из программы, а цифры не совпадают вверх.

Поиск google для LINE и я уверен, что будет найдено множество результатов.

3

Если вы работаете под Linux или OSX, посмотрите на Valgrind (бесплатно, доступный на OSX через Macports). Для Windows мы используем Rational PurifyPlus (требуется лицензия).

Вы также можете взглянуть на Dmalloc или даже на Paul Nettle's memory manager, что помогает отслеживать связанные с памятью ошибки.

1

Если вы находитесь в Mac OS X, есть удивительная библиотека под названием libgmalloc. libgmalloc помещает каждое выделение памяти на отдельную страницу. Любой доступ к памяти/запись за пределы страницы сразу вызывает ошибку шины. Обратите внимание, однако, что запуск вашей программы с помощью libgmalloc, вероятно, приведет к значительному замедлению.