c - 此代码是否包含释放后使用?

标签 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. f2 中,一旦 x 被释放,您就会取消引用它,因为 printfing x使用 %s 格式说明符将取消引用 x,或者换句话说,它将访问 x 指向的内存,并且该内存将具有未确定的调用free后的内容。

  2. 即使你删除了free(x),你仍然会得到未定义的行为,因为这样你就会printfing x ,而x指向有效但未初始化的内存。

关于c - 此代码是否包含释放后使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44415381/

相关文章:

c - C中结构和指针的malloc

java - Android 内存泄漏新线程()

iphone - iOS : NSDateFormatter memory leak/viewDidUnload

C -- 结构体和指针基础题

c - fgetc() 如何知道下一个字符的地址?如何检索当前字符地址?

memory-management - 为什么我们不应该在嵌入式系统中动态分配不同大小的内存

ios - 如何正确释放UIPopoverController?

c - 在 C 中使用函数指针数组时出现段错误

c - 为什么我从来没有超过1?

java - 如何减少 JVM 中的已提交堆内存