Malloc не возвращает память, почему? - PullRequest
0 голосов
/ 16 августа 2010

Я выделяю память с помощью malloc и освобождаю ее после использования, но в каждой третьей операции я замечаю, что malloc не выделяет память.

Может кто-нибудь сказать мне, что происходит ..почему malloc не работает ... что я должен сделать, чтобы выделить память?

Публикация кода затруднительна, так как включает в себя много-много файлов ... в основном я думаю, что она исчерпывает память ..Может быть, я смогу как-то определить, сколько памяти я трачу или использую?

Ответы [ 2 ]

3 голосов
/ 16 августа 2010

Как отметили другие, malloc() возвращает NULL, потому что вашему приложению не хватает памяти (или, точнее, виртуального адресного пространства).

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

Здесь в основном могут происходить две вещи:

  1. Ты утечка памяти . (Я вижу, вы говорите, что вы освобождаете используемую память, но случайная утечка памяти чрезвычайно проста.) Информацию о встроенных функциях Visual C ++ для обнаружения утечек можно найти здесь .

  2. Вы фрагментируете память . Поскольку приложения начали использовать значительную часть доступного 32-разрядного адресного пространства, фрагментация стала настоящей проблемой. К сожалению, на самом деле нет точного решения этой проблемы, но посмотрите на эти вопросы SO для получения дополнительной информации:

    Как избежать фрагментации кучи?

    Как решить проблему фрагментации памяти

    Управление памятью в приложениях с интенсивным использованием памяти

0 голосов
/ 16 августа 2010

почему вы думаете "malloc не выделяет память"?Возвращается ли значение NULL или вы просматриваете статистику системной памяти.Если это последнее, то это может быть потому, что ваша реализация библиотеки C удерживает ранее выделенную память, а не возвращает ее непосредственно в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...