????5??free()????

?????????????????????????'freeze'????????????'zebra'?????????

#include<stdio.h> 
 
int main(int argc?? char *argv[]) 

    char *ptr = (char*)malloc(10); 
 
    if(NULL == ptr) 
    { 
        printf(" Malloc failed "); 
        return -1; 
    } 
    else if(argc == 1) 
    { 
        printf(" Usage  "); 
    } 
    else 
    { 
        memset(ptr?? 0?? 10); 
 
        strncpy(ptr?? argv[1]?? 9); 
 
        while(*ptr != 'z') 
        { 
            if(*ptr == '') 
                break; 
            else 
                ptr++; 
        } 
 
        if(*ptr == 'z') 
        { 
            printf(" String contains 'z' "); 
            // Do some more processing 
        } 
 
       free(ptr); 
    } 
 
    return 0; 
}
 


????????????????????????????????“ptr”?????while?????“ptr”?洢????????????“zebra”???while????????????????????????free()??????????malloc()??????????“freeze”???“ptr”?洢????????while??????????????′???free()????????????????seg-fault?????????

????6?????_exit???

??????????????????У?atexit()????б???????????

#include<stdio.h> 
 
void func(void) 

    printf(" Cleanup function called "); 
    return; 

 
int main(void) 

    int i = 0; 
 
    atexit(func); 
 
    for(;i<0xffffff;i++); 
 
    _exit(0); 
}
 


???????????_exit()???????????ú???????е???atexit()????????????????atexit()??????exit()????“return”?????????