c - 即使 Proc 分配的内存少于 ulimit 限制的内存,它也会崩溃

标签 c memory segmentation-fault stack ulimit

我已通过 ulimit -s 2000 和 ulimit -Ss 2000 将堆栈大小设置为 2000Kb 以实现硬限制。在下面的程序中,我分配了大约 2040000(510000 x 4) 字节,这比我限制的要少,即。 2048000(2000*4) 字节,但我看到我的程序崩溃了!任何人都可以提出为什么会发生这种情况。

#include <stdio.h>
#include <malloc.h>
int main()
{
    int a[510000] = {0};
    a[510000] = 1;
    printf("%d", a[510000]);
    fflush(stdout);
    sleep(70);
}

编辑 1:崩溃不是因为数组索引超出范围,因为我尝试了较低的索引但仍然崩溃。只有当我用 ulimit 限制时才会发生这种情况。

最佳答案

int a[510000] 将是一个索引从 0509999 的数组。 a[510000] 超出数组范围。

关于c - 即使 Proc 分配的内存少于 ulimit 限制的内存,它也会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271742/

相关文章:

delphi - 分配给多个StringList的对象的可用内存

memory - 为什么要保留内存地址 0x0,为什么要保留?

objective-c - EXC_BAD_ACCESS (SIGSEGV) - KERN_INVALID_ADDRESS

c++ - 使用 MinGW 帮助在 Windows 上编译 GTK+

c - SPI通讯,如何正确设置时钟

c - 如何立即调入新分配的虚拟内存

c - 共享内存中的简单检查返回 SIGSEGV 错误 008b

android - mmap后在memcpy中获取段错误SIGSEGV

谁能解释这段代码会做什么?

c - 倒带文件,创建动态结构