Calloc() назначает ранее назначенную память

Я разрабатываю проект на C, и оказывается, что в определенный момент я вызываю функцию calloc(), и она назначает блок памяти, который уже используется. Как это возможно? Я проверил использование памяти и каждый раз, когда я вызываю malloc / calloc, я вызываю free (pointer_to_the_allocated_memory). Таким образом, это не проблема утечки памяти и не дважды освобожденный указатель. Я не вставляю свой код, поскольку он предназначен для работы в колледже, и я еще не отправил его. Любая помощь / совет приветствуется. Заранее спасибо.

1 ответ

Решение

Возможно, что два указателя указывают на одно и то же место.

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 */
Другие вопросы по тегам