在我的测试中,我发现可以在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
为什么免费(PHEAD)我可以访问(读取和写入)的指针?为什么没有分段错误?
取消引用free'd指针是_undefined behavior_。它很可能不会崩溃,因为它仍然指向一些真实的记忆,但内容可能不是您所期望的。总之,不要这样做! – 2013-03-15 12:12:22