为什么这个程序不创建核心转储?
Why is this program not creating a core dump?
根据 this question and this one,只要您关闭操作系统,操作系统就会释放您在程序中分配的所有内容,而且在像我这样的简单程序中,它并不那么重要。
Sure in very short running simple programs, failing to free memory
won't have a noticeable effect. jaredpar
据人说:
The malloc() function allocates size bytes [...]
因此,我使用 malloc 分配了一个具有 20 字节 内存的整数数组(sizeof int
是 4 字节 在我的系统上):
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() 不会创建核心转储?
我知道核心转储是什么以及如何避免它,我的问题纯粹是出于好奇,因为对我来说,这是一种奇怪的行为。
Shouldn't both programs create a core dump?
它可以,但不必。
你的程序执行了未定义的行为,执行该程序的结果是未定义的:
- 可以成功退出,
- 它可能会中止,
- 它可能会因分段错误而崩溃,
- 它会融化你的 CPU,
- 它可以发射核导弹。
这就是未定义行为的含义:任何事情都可能发生。
您对 特定 事情会发生的预期是不正确的。
根据 this question and this one,只要您关闭操作系统,操作系统就会释放您在程序中分配的所有内容,而且在像我这样的简单程序中,它并不那么重要。
Sure in very short running simple programs, failing to free memory won't have a noticeable effect. jaredpar
据人说:
The malloc() function allocates size bytes [...]
因此,我使用 malloc 分配了一个具有 20 字节 内存的整数数组(sizeof int
是 4 字节 在我的系统上):
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() 不会创建核心转储?
我知道核心转储是什么以及如何避免它,我的问题纯粹是出于好奇,因为对我来说,这是一种奇怪的行为。
Shouldn't both programs create a core dump?
它可以,但不必。
你的程序执行了未定义的行为,执行该程序的结果是未定义的:
- 可以成功退出,
- 它可能会中止,
- 它可能会因分段错误而崩溃,
- 它会融化你的 CPU,
- 它可以发射核导弹。
这就是未定义行为的含义:任何事情都可能发生。
您对 特定 事情会发生的预期是不正确的。