C 将内存设置在程序中断之外不会';断层

C 将内存设置在程序中断之外不会';断层,c,macos,memory-management,heap-memory,sbrk,C,Macos,Memory Management,Heap Memory,Sbrk,我正试图学习更多关于内存管理(mmap、brk、sbrk)的知识,但我确实对如何: char *ptr = sbrk(0); char *ptr2 = ptr + 100000; *ptr2 = 8; printf("%d\n", *ptr2); 不会触发分段错误吗?我正在用OS X Mojave上的叮当声编译这个 sbrk()的手册页上说它已被弃用,但也说sbrk()应该可靠地返回程序中断。如果这是真的,并且pagesize是4096字节,那么设置超出程序中断

我正试图学习更多关于内存管理(mmap、brk、sbrk)的知识,但我确实对如何:

    char *ptr = sbrk(0);
    char *ptr2 = ptr + 100000;
    *ptr2 = 8;
    printf("%d\n", *ptr2);
不会触发分段错误吗?我正在用OS X Mojave上的叮当声编译这个

sbrk()的手册页上说它已被弃用,但也说sbrk()应该可靠地返回程序中断。如果这是真的,并且pagesize是4096字节,那么设置超出程序中断100000个空间的地址值不应该触发segfault吗?如果它不能可靠地返回程序中断(如果您可以为超出它的地址设置值,它就不能返回),那么您如何在Mac OS上可靠地找到程序中断

同样的代码在Ubuntu18.10上产生了一个segfault


谢谢

未定义的行为意味着您无法保证任何东西
不会触发分段错误?
-具有分段错误的代码是一回事。另一种情况是,期望代码能够识别故障。你不能指望它会出现故障。可能吧,这很有道理。我为我的无知道歉,谢谢大家!您好,欢迎来到Stack Overflow。我推荐阅读,它包含了一个很好的例子,很容易理解和记住。