从手动分配的内存中释放指针后,我可以为指针赋值

问题描述 投票:0回答:1

我不确定为什么我得到的值是 3490,即使作者说 *p = 3490 应该是错误,因为我们是在 free() 之后执行的。有什么想法吗?

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

int main()
{

    // Allocate space for a single int (sizeof(int) bytes-worth):

    int *p = malloc(sizeof(int));

    *p = 12; // Store something there

    printf("%d\n", *p); // Print it: 12

    free(p); // All done with that memory

    *p = 3490;          // ERROR: undefined behavior! Use after free()!
    printf("%d\n", *p); // Print it: 3490
}

我尝试编译,值仍然显示。我没有看到任何未定义的行为。

c malloc
1个回答
0
投票

*p = 3490
应该是错误...

不。

*p = 3490
未定义行为 (UB),因为
p
中的值在释放后无效。任何事情都可能发生。
没有应该

© www.soinside.com 2019 - 2024. All rights reserved.