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 */