데이터 구조 - 순서 표 소각

3057 단어
//      
#include  
#include  
#define OK 1 
#define OVERFLOW -2 
#define LIST_INIT_SIZE 10//               
typedef int Status; //Status        ,         , OK 
typedef int ElemType;//ElemType            
typedef struct{ 
ElemType *elem; 
int length; 
int listsize; 
}Sqlist; 
Status InitList(Sqlist &L) 
{//          
// L.elem=new ElemType[MAXSIZE];//              MAXSIZE     [  L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));] 
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//L.elem          malloc                  Elemtype      size*LIST_INIT_SIZE       
//malloc        size        
if(!L.elem)exit(OVERFLOW);//         
L.length=0;//     0 
L.listsize=LIST_INIT_SIZE; //        
return OK; 
} 
int main(){ 
Sqlist L; 
InitList(L); 
free(L.elem);//     
L.elem=NULL;
L.length=0;
L.listsize=0;
printf("   L :L.elem=%u L.length=%d L.listsize=%d
"
,L.elem,L.length,L.listsize); }

1. * L. elem = NULL 과 free 함수 의 차이 * L. elem = NULL 은 포인터 의 방향 을 수정 하여 메모리 에 있 는 데 이 터 를 소각 하지 않 았 습 니 다.free 는 데 이 터 를 삭 제 했 지만 지침 을 수정 하지 않 았 습 니 다.우선, 지침 은 메모리 의 어떤 주 소 를 가리킨다.그래서 첫 번 째 문 구 는 이 포인터 가 가리 키 는 주 소 를 0, 즉 NULL 로 수정 하 는 것 입 니 다.그 다음으로 동적 분배 메모리 malloc 는 메모리 더미 위 에 메모리 공간 을 열 어 주 는 것 이다.보통 메모리 에 접근 할 수 없 는 지침 을 사용 합 니 다.free 는 포인터 가 가리 키 는 malloc 에서 열 린 메모 리 를 방출 하 는 데 사 용 됩 니 다.그래서 free 와 malloc 는 짝 을 지어 사용 합 니 다.malloc 의 메모리 가 있 으 면 포인터 에 NULL 을 직접 할당 하면 나중에 이 메모 리 를 사용 할 수 없습니다.이 부분의 메모리, 즉 메모리 유출 을 다시 이용 할 수 없 게 된다.물론 같은 메모리 에 여러 번 free 를 사용 할 수 는 없다. 그것 도 잘못된 것 이다.일반적으로, 실수 가 다시 풀 리 지 않도록 free 메모리 방출 을 실행 하고, 값 을 NULL 로 할당 합 니 다.
예:
free(L.elem);// free , NULL
L.elem=NULL;
L.length=0;
L.listsize=0;

좋은 웹페이지 즐겨찾기