此代码是否包含free-after-free?

时间:2017-06-07 14:24:20

标签: c memory-management memory-leaks

int f2(char* x, int f) {
    int i=0;
    free(x);
    if(f) {
        printf("%s", x); 
        return 1;
    }
    return 0;
}

int main(int argc, char argv) {
    char* x = malloc(10);
    return f2(x, argc);
}

将释放的指针传递给printf被认为是免费的吗?

1 个答案:

答案 0 :(得分:1)

您会多次获得未定义的行为(google that term):

    {li>

    f2您解除引用x后,因为printf x %s格式说明符将取消引用x {1}},或换句话说,它将访问x指向的内存,并且在调用free后该内存将具有未确定的内容。

  1. 即使您删除了free(x),仍然会得到未定义的行为,因为您printf x x,而prot.attr("class", id + " item") 指向有效但是没有初始化的记忆。