在测试期间,我发现在free()之后可以使用指针。我有以下代码:
typedef struct{ int module_id; int adc_id; struct config_line * pnext; } config_line; config_line * create_list() { config_line * phead = (config_line *) malloc(sizeof(config_line)); phead->pnext=NULL; phead->module_id = 1; phead->adc_id = 2; printf("module_id=%d adc_id=%d\n",phead->module_id, phead->adc_id); free(phead); printf("module_id=%d adc_id=%d\n",phead->module_id, phead->adc_id); phead->module_id = 2; phead->adc_id = 5; printf("module_id=%d adc_id=%d\n",phead->module_id, phead->adc_id); }
此代码的输出是:
module_id=1 adc_id=2 module_id=0 adc_id=2 module_id=2 adc_id=5
为什么在free(phead)之后我可以访问(读和写)指针?为什么没有分割错误?
因为使用无效的指针会调用未定义的行为。这意味着行为是…好… 未定义。 它没有崩溃的 义务 。