本文介绍了在 free() 之后使用指针的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的测试中,我发现可以在 free() 之后使用指针.我有以下代码:

During my tests, I have found that it is possible to use pointer after free(). I have the following code:

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
",phead->module_id, phead->adc_id);

free(phead);

printf("module_id=%d adc_id=%d
",phead->module_id, phead->adc_id);

phead->module_id = 2;
phead->adc_id = 5;

printf("module_id=%d adc_id=%d
",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) 之后我可以访问(读取和写入)指针?为什么没有分段错误?

Why after free(phead) I can get access (read and write) to pointer? Why there is not segmentation fault?

推荐答案

因为使用无效指针会调用未定义的行为.这意味着行为是......好吧......未定义.它不是必须崩溃.

Because using an invalid pointer invokes undefined behavior. And that means that the behavior is... well... undefined. It's not obliged to crash.

这篇关于在 free() 之后使用指针的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-16 16:15