在free()之后使用指针

在测试期间,我发现在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)之后我可以访问(读和写)指针?为什么没有分割错误?

回答:

因为使用无效的指针会调用未定义的行为。这意味着行为是…好… 它没有崩溃的 。

以上是 在free()之后使用指针 的全部内容, 来源链接: utcz.com/qa/427648.html

回到顶部