Я разрабатываю проект C, и выясняется, что в определенный момент я вызываю функцию calloc() и назначает блок памяти, который уже используется. Как это возможно? Я проверил свои распределения памяти и каждый раз, когда я вызываю malloc/calloc, я звоню бесплатно (pointer_to_the_allocated_memory). Таким образом, это не проблема утечки памяти, а не двукратный указатель. Я не вставляю свой код, поскольку он предназначен для работы с коллегами, и я еще не отправил его. Приветствуется любой тип помощи/совета. Спасибо заранее.Calloc() присваивает ранее назначенную память
ответ
Возможно, что два указателя указывают на одно и то же место.
p1 = malloc(sizeof(int));
/* ... */
p2 = p1;
/* ... */
free(p1);
/* ... */
p3 = malloc(sizeof(int)); /* may allocate the block already used by p2 */
Обратите внимание, что это часто не так очевидно. Это может произойти с помощью арифметики указателей (т. Е. p2++
), или различные части этого могут быть выполнены в разных функциях.
Другая возможность заключается в том, что вы освобождаете указатель, не замечая этого:
p1 = malloc(sizeof(int));
foo(p1); /* this function calls free(p1) */
p2 = malloc(sizeof(int)); /* may allocate the block already used by p1 */
Следует помнить, что, хотя это возможно, это маловероятно, и нет никакого способа узнать, что сценарий, который вы написали, произойдет. Это очень специфическая реализация компилятора. – Nava2
Учитывая, что calloc() «назначает блок памяти, который уже используется», это вполне вероятно. Чтобы назначить блок памяти, который используется, блок должен быть либо освобожден, либо не назначен. – user31264
Спасибо за ответ user31264 – mariano
- 1. Изменение переменной также изменяет ранее назначенную переменную
- 2. calloc перезаписывает память другой переменной?
- 3. с - последовательной calloc вызывает коррумпированную некоторую память
- 4. Как отобразить ранее назначенную переменную из прошедшего сеанса
- 5. Общая память POSIX присваивает значение строке
- 6. Предоставляет ли Opcache на PHP7 всю назначенную память?
- 7. удаление DIV автоматически очистит память назначенную привязок и других элементов
- 8. «calloc» автоматически не потребляет память из оперативной памяти
- 9. Между malloc и calloc, который выделяет непрерывную память
- 10. Динамическая память (calloc) и указатель на указатель [C]
- 11. Почему вызов calloc в gdb не появляется, чтобы обнулить память?
- 12. Непонимание о том, как создается память с помощью malloc()/calloc()
- 13. calloc() и NULL
- 14. предпочитая таНос над calloc
- 15. Разница между (int *) calloc и просто calloc?
- 16. Распределение памяти с помощью calloc
- 17. ли память присваивает имя указателя или адрес указателя?
- 18. Наблюдать calloc, malloc, новое событие
- 19. переменная получает назначенную функцию
- 20. «Перерыв» удалить назначенную переменную?
- 21. Calloc взаимодействует с fgets?
- 22. Многомерные массивы, выделенные через calloc
- 23. Сколько памяти calloc и malloc можно выделить?
- 24. malloc, calloc и динамические массивы
- 25. Сколько памяти действительно выделяет calloc?
- 26. C вопросник, связанный с calloc vs malloc
- 27. UITextField не показывает назначенную строку
- 28. Как вызвать назначенную Smarty переменной
- 29. Якорь выполняет различную функцию, назначенную
- 30. Является ли функция calloc calloc вектором указателя? (Язык C)
Попробуйте использовать что-то вроде Valgrind для отслеживания/Debug использования памяти. –
Обратите внимание, что каждая программа имеет собственное пространство виртуальной памяти. – sjsam
Не могли бы вы разместить что-то похожее на оригинал? Есть много людей, которые спрашивают про собственный код, который они не хотят делиться напрямую, но обычно приводят пример. Можете ли вы воссоздать ситуацию в меньших масштабах? –