C 언어 에서 free 함수 의 사용 에 대한 상세 한 설명
메모:free 함수 와 malloc()함수 가 짝 을 지어 사용 하고 malloc 함수 가 신청 한 동적 메모 리 를 방출 합 니 다.free(p)라 는 문구 에 대해 p 가 NULL 지침 이 라면 free 대 p 는 몇 번 을 조작 하 더 라 도 문제 가 되 지 않 습 니 다.만약 p 가 NULL 포인터 가 아니라면,free 대 p 를 두 번 연속 으로 조작 하면 프로그램 실행 오류 가 발생 할 수 있 습 니 다.
프로그램 을 보다
#include <stdio.h>
#include <stdlib.h>
int main()
{
char * name = NULL;
free(name);
free(name);
free(name);
printf("no problem11111111
");
name = (char *) malloc(10);
if(name)
{
printf("allocate successful
");
}
else
{
printf("allocate failed
");
}
free(name);
free(name);
printf("no problem2222222
");
return 0;
}
실행 결과:이 프로그램 은 마침 위의 주의사항 을 검증 했다.
이 오류 가 발생 하지 않도록 함 수 를 썼 습 니 다.
void myfree(void ** point)
{
if(*point != NULL)
{
free(*point);
*point = NULL;
}
}
이 함 수 는 1 급 포인터 의 주 소 를 채소 로 입력 하면 1 급 지침 을 조작 할 수 있 습 니 다.매번 free 로 공간 을 풀 때마다 1 단 지침 을 NULL 로 설정 하면 중복 방출 시 프로그램 이 무 너 지 는 것 을 피 할 수 있 습 니 다.이 함 수 를 아까 프로그램 에 적용 하면:
#include <stdio.h>
#include <stdlib.h>
void myfree(void ** point)
{
if(*point != NULL)
{
free(*point);
*point = NULL;
}
}
int main()
{
char * name = NULL;
myfree((void**)&name);
myfree((void**)&name);
myfree((void**)&name);
printf("no problem11111111
");
name = (char *) malloc(10);
if(name)
{
printf("allocate successful
");
printf(" : %p
",name);
}
else
{
printf("allocate failed
");
}
myfree((void**)&name);
myfree((void**)&name);
printf("no problem2222222
");
return 0;
}
프로그램 에 오류 가 없 음 을 알 수 있 습 니 다.
그러나 또 하나의 문 제 는 처리 해 야 합 니 다.my free 함 수 를 호출 할 때마다 1 급 포인터 의 주 소 를 찾 아야 하고 강제 형식 을 void**로 바 꿔 야 합 니 다.즉,매번(void**)&point 를 써 야 합 니 다.그러면 귀 찮 습 니 다.
사실 우 리 는 파 라 메 터 를 가 진 매크로 정의 로 코드 를 간소화 할 수 있 습 니 다.매크로 정 의 는 다음 과 같 습 니 다.
#define FREE(p) myfree((void **)&p)
매크로 정 의 를 사용 한 전체 코드:
#include <stdio.h>
#include <stdlib.h>
#define FREE(p) myfree((void **)&p)
void myfree(void ** point)
{
if(*point != NULL)
{
free(*point);
*point = NULL;
}
}
int main()
{
char * name = NULL;
FREE(name);
FREE(name);
FREE(name);
printf("no problem11111111
");
name = (char *) malloc(10);
if(name)
{
printf("allocate successful
");
printf(" : %p
",name);
}
else
{
printf("allocate failed
");
}
FREE(name);
FREE(name);
printf("no problem2222222
");
return 0;
}
자,오늘 은 여기까지 쓰 겠 습 니 다.도움 이 되 셨 으 면 좋 겠 습 니 다.잘못된 부분 이 있 으 면 지적 해 주세요.감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 간단한 파일 r/w 조작 방법데이터의 입력과 출력은 거의 모든 C 언어 프로그램과 수반된다. 입력이란 원본에서 데이터를 얻는 것이다. 출력은 단말기에 데이터를 쓰는 것으로 이해할 수 있다.이곳의 원본은 키보드, 마우스, 하드디스크, 시디, 스캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.