c - 不是一代核心

标签 c

#include<stdio.h>
#include <stdlib.h>
int *ip_range ;

int main()
{
  ip_range = (int *) malloc(1);
  ip_range[0]=2;
  ip_range[10]=2;
  ip_range[20]=2;
  ip_range[33787]=12444;
  printf("%d\n", ip_range[33787]);

}

我只有 1 个 malloc,那么为什么它可以访问到 33787 并在 33788 上生成核心。

最佳答案

您正在写入您现在拥有的内存,即没有被 malloccallocrealloc 交还。这导致 undefined behaviour 。您的程序可以做任何事情,包括不产生任何错误消息或核心转储。

关于c - 不是一代核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51436001/

相关文章:

c - XC8 寄存器声明冲突(例如 TRIS、SSP1CON1 等)

c - 如何在 C 中使用带有嵌套结构的指定 init ?

c - 如何定位类型和变量首次使用 gdb 声明的位置

c - 仅 C 代码的未定义对 `__aeabi_unwind_cpp_pr1' 的引用

c - 无法使编码求解线性方程

c - 如何编写返回可变长度字符串的 C 函数?

C - 获取 token 信息时缓冲打印垃圾字符

c - 在 C 中反转数组?

c++ - 空指针的地址?

c - 检查 C 代码是否已弃用 POSIX 调用的最佳方法是什么?