Почему я должен использовать указатель на указатель в моей функции safferFree (void **), когда я хочу освободить память внутри этой функции? Почему под кодом нет свободного IP-указателя?Почему моя функция free() не работает?
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
void saferFree(void *);
int main()
{
int *ip;
ip = (int*) malloc(sizeof(int));
*ip = 5;
saferFree(ip);
return 0;
}
void saferFree(void *pp){
if((void*)pp != NULL){
free(pp);
pp = NULL;
}
}
Выше кода не освобождается указатель на pp, но ниже код с двойным указателем работает правильно. Я хочу знать Почему?
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
void saferFree(void **);
int main()
{
int *ip;
ip = (int*) malloc(sizeof(int));
*ip = 5;
saferFree(&ip);
printf("%p", ip);
return 0;
}
void saferFree(void **pp){
if(*pp != NULL){
free(*pp);
*pp = NULL;
}
}
Что не работает? –
Пожалуйста, покажите часть, где вы увидите «.It не освобождает выделенную память». Некоторые люди путаются. –
Я подозреваю, что проблема в OP ожидает, что указатель 'ip' main() будет' NULL', потому что он установлен в 'NULL' в' safeFree() '. 'pp' является локальным для' safeFree() ', поэтому он не отражает в main(). См. Также этот пост: http://stackoverflow.com/questions/13431108/changing-address-contained-by-pointer-using-function – usr