pfd*_*ers 2 c memory arrays memory-management segmentation-fault
在代码片段中,一旦尝试为其分配值,我就预料到了分段错误count[1].然而,代码继续并执行第二个for循环,仅在程序终止时指示分段错误.
#include <stdio.h>
int main()
{
int count[1];
int i;
for(i = 0; i < 100; i++)
{
count[i] = i;
}
for(i = 0; i < 100; i++)
{
printf("%d\n", count[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释发生了什么吗?
编辑的原因:
根据用户的评论改进了示例代码
int count[0] -> int count[1],也避免了火焰战争.
jal*_*alf 15
你的写作超出了数组的范围.这并不意味着你会遇到分段错误.它只是意味着你有未定义的行为.您的程序的行为不再受C标准的约束.任何事情都可能发生(包括程序似乎有效) - 段错误只是一种可能的结果.
实际上,当您尝试访问操作系统未映射到您的进程的内存页时,会发生分段错误.在典型的x86 PC上,每个页面都是4KB,因此基本上,您的进程可以访问4KB块的内存,如果您在当前块之外写入,则只会出现段错误.
使用您正在使用的小索引,您仍然保留在当前内存页面中,该页面分配给您的进程,因此CPU不会检测到您正在访问内存超出范围.
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |