C语言 为什么此程序不创建核心转储



根据这个问题和这个问题,只要你关闭它,操作系统就会释放你在程序中错误定位的东西,而且在像我这样的简单程序中,它并不那么重要。

当然在很短的时间内运行简单的程序,无法释放内存 不会有明显的效果。 贾雷德帕

据人说:

malloc() 函数分配大小字节 [...]

因此,我使用 malloc 分配了一个具有 20 字节内存的整数数组(在我的系统上sizeof int4 个字节):

array = malloc(5 * sizeof(int));

因此,我应该只能写 5 个整数(5 * 4 字节 = 20 字节 = 5 个整数)。现在这个程序在这里应该创建一个核心转储,但事实并非如此,出于某种原因:

#include <stdio.h>
#include <stdlib.h>
int main(void){
        int *array = NULL, i = 0;
        array = malloc(5 * sizeof(int));
        if(array == NULL)
        {
                printf("nERROR : Out of memory.n");
                return 1;
        }
        for(i = 0; i < 10; i++)
                scanf("%d", &array[i]);
return 0;
}

这个程序让我输入 10 个整数而无需创建核心转储......相反,在程序末尾使用 free(array) 将正确导致创建核心转储。这不是很奇怪吗?两个程序不应该创建一个核心转储吗?为什么不使用 free() 不会创建核心转储?我知道什么是核心转储以及如何避免它,我的问题纯粹是好奇,因为对我来说,这是一种奇怪的行为。

两个程序不应该创建一个核心转储吗?

它可以,但不必

您的程序执行未

定义的行为,并且执行此类程序的结果是未定义的:

  • 它可以成功退出,
  • 它可能会中止,
  • 它可能会因分段错误而崩溃,
  • 它可能会融化你的CPU,
  • 它可以发射核导弹。

这正是未定义行为的含义:任何事情都可能发生。

你对特定事情会发生的预期是不正确的。

相关内容

  • 没有找到相关文章

最新更新