gpt4 book ai didi

c - C中的内存保护

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:20 24 4
gpt4 key购买 nike

C 中没有内存保护吗?进程可以编辑任何内存空间吗?C 如何确定分配的内存是否存储在某处?例如:

int a[2] = {2,3};
int *ptrA = &a;

int b = 10;
int *ptrB = &b;

printf("%d ",*(ptrA+1009));
*(ptrA+1009) = 10;
printf("%d \n",*(ptrA+1009));

printf("%d ",*(ptrB+1009));
*(ptrB+1009) = 10;
printf("%d\n",*(ptrB+1009));

此处指向未分配内存的指针具有读/写访问权限。代码段符合要求并运行时出现警告。它是未定义的行为/机器依赖吗?

最佳答案

内存保护 并不像您认为的那样:它是阻止进程访问不应访问的内存的措施。然而,进程当然可以访问它们自己的内存,而 C/C++ 和许多其他语言允许您这样做。

Here pointer to unallocated memory has read/write access.

将指针解引用到未分配的就是我们所说的软件中的错误 :) 但是,您的编译器允许您这样做是完全可以的。 C/C++ 不要支持,如果你想玩弄指针,一定要支持。如果您尝试访问的地址未映射到进程的内存中(这就是工作中的内存保护),您将引发未定义的行为或段错误,但这些语言允许您这样做。

关于c - C中的内存保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32467669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com