Здесь temp
- указатель, а не идентификатор.
Так что temp
указывает на память, выделенную моим malloc
.
Таким образом, когда вы выделяете новую память и используете ЖЕ указатель, чтобы указать на вновь выделенную память, она НЕ ДОЛЖНА указывать старый выделенный блок памяти, и он теряется навсегда. Итак, у вас есть утечка памяти .
Если вам больше не нужна память, на которую указывает temp после окончания текущей итерации цикла, используйте вместо этого следующий код.
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *temp;
while(1)
{
temp= malloc(sizeof(char)*10);
/*some code*/
/* free the memory pointed by temp */
free(temp);
}
}
Таким образом, у вас нет утечки памяти, так как память, указанная для моей температуры, освобождается в конце итерации, прежде чем новый блок выделяется в начале следующего цикла.
Обновление:
Также вы можете использовать один и тот же блок памяти, на который указывает temp во всем цикле. Нет необходимости перераспределять в каждой итерации.
И если вы не хотите сохранять старую память, вы можете просто использовать memset
, например,
#include<stdio.h>
#include<stdlib.h>
int main()
{
/* allocate memopry only once */
char *temp = malloc(sizeof(char)*10);
while(1){
/* zero out the memory so no old data is left */
memset((void*)temp, 0, sizeof(char)*10);
/* some code that uses temp */
}
/* free the allocated memory */
free(temp);
}