释放嵌套指针并在C中设置为NULL

时间:2015-04-27 22:03:44

标签: c security

#include <stdio.h>
#include <stdlib.h>

typedef struct sample {
 void* data;
}sample_t;


int main()
{
    printf("Hello world!\n");
    sample_t* samplestruct = (sample_t*) malloc(sizeof(sample_t));
    samplestruct->data = (void*) malloc(10);

    free(samplestruct->data);    
    free(samplestruct);    
    samplestruct->data = NULL;    
    samplestruct = NULL;    

    return 0;
}

在上面的代码中,我释放了两个&#39; samplestruct-&gt;数据&#39;和&#39; samplestruct&#39;然后按我自由的顺序将它们都设置为NULL。现在,代码没有崩溃应用程序。代码有问题吗?这可以在任何方面被利用(我的意思是安全性)?

1 个答案:

答案 0 :(得分:2)

传统上,free的实现在下次调用malloc之前不会改变自由内存。在某些平台上仍然如此(这可能是您的代码不会崩溃的原因)但不能依赖并且不应该依赖。即使是这样,在多线程应用程序中,只有空闲的内存可能在调用free和使用之间由不同的线程分配。通常,攻击者可以使用这种竞争条件使您的指针指向其他数据,可能是攻击者控制的数据。

不要像你问题中的代码那样编写代码。