PDA

View Full Version : کد free شخصی در سی



ayub_coder
پنج شنبه 07 مرداد 1395, 11:16 صبح
سلام دوستان این تابع saferFree چرا اشاگر رو 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;
}
}






اگه کدهای


free(pp);
pp = NULL;


رو داخل خود main بنویسیم درست کار میکنه ولی تابع saferFree من درست کار نمیکنه؟:افسرده:

negative60
پنج شنبه 07 مرداد 1395, 14:50 عصر
اشتباه شما اینه که داری مقدار اشاره‌گر رو به عنوان آرگومنت به تابع saferFree میفرستید نه خود اشاره‌گر رو

به این صورت بنویسید:

void saferFree(void **pp)
{
if(*pp != NULL){
free(*pp);
*pp = NULL;
}
}

int main()
{
int *ip;
ip = (int*) malloc(sizeof(int));
*ip = 5;

saferFree((void**)&ip);

printf("ip pointer: %d\n", ip);

return 0;
}

ciavosh
پنج شنبه 07 مرداد 1395, 15:42 عصر
سلام دوستان این تابع saferFree چرا اشاگر رو 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;
}
}






اگه کدهای


free(pp);
pp = NULL;


رو داخل خود main بنویسیم درست کار میکنه ولی تابع saferFree من درست کار نمیکنه؟:افسرده:


چه مشکلی پیش میاد؟

LinuxBox
پنج شنبه 07 مرداد 1395, 16:22 عصر
کدتون مشکلی نداره و درست کار میکنه
منظورتون از free کردن اشاره گر چی هست؟ ( از بین رفتن متغیر اشاره گر یا از بین رفتن محتویات اشاره گر و برگردوندن حافظه به سیستم )