c - 访问超出分配的空间并且不会出现段错误

标签 c pointers undefined-behavior

我为 char 指针分配了一些空间,并尝试访问超出分配的空间,但仍然没有出现段错误。我的代码如下:

   char *src = malloc(4);
   strcpy(src, "1234");
   char *temp;
   for(int i = 0 ; i<5 ; i++) {
        temp = src;
        src ++;     
        printf("ite ch  %c\n",src[0]);
    }
  printf("Still no segfault  %s\n",temp);

现在我的问题是:如何超出分配的空间?我不应该出现段错误吗?

最佳答案

当您像此处所做的那样写入超过由 malloc 分配的内存块末尾时,您将调用 undefined behavior .

未定义的行为意味着无法预测程序的行为。它可能会崩溃,可能会输出奇怪的结果,或者可能看起来工作正常。此外,看似无关的更改(例如添加未使用的局部变量或调用 printf 进行调试)可能会改变未定义行为的表现方式。

总而言之,对于未定义的行为,仅仅因为程序可能崩溃并不意味着它会崩溃。

关于c - 访问超出分配的空间并且不会出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46698372/

相关文章:

c - 用 C 语言编写函数

c++ - 临时函数调用 : UB?

c++ - 为什么调用没有主体的纯虚方法不会导致链接器错误?

c - c 中的 void 错误消息

c - execle() 函数中出现 errno 错误地址错误

c - 如何在 Linux 内核中进行分析或使用 perf_event*.[hc] 框架?

c - 如何处理来自 copy_from_user() 的页面错误?

c - 查找矩阵中列号最小的前导元素

c++ - 如何将 Windows SOCKADDR_BTH 的 C++ 转换复制到 Rust 中的 SOCKADDR?

c - 将接收静态二维数组的函数转换为接收指针的函数