根据this question和this one,只要您关闭它,操作系统就可以释放您在程序中编辑的监视器,而且在像我这样的简单程序中,操作系统可以解决问题。不那么重要。
确保在非常短的时间内运行简单的程序,无法释放内存 不会有明显的效果。 jaredpar
据男人说:
malloc()函数分配 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个整数而不创建coredump ...而是在程序结束时使用free(array)
将正确地导致创建核心转储。难道不奇怪吗?两个程序都不应该创建核心转储吗?为什么不使用free()不会创建核心转储?
我知道核心转储是什么以及如何避免它,我的问题纯粹是好奇心,因为对我来说,这是一种奇怪的行为。
答案 0 :(得分:2)
两个程序都不应该创建核心转储吗?
可以,但不得。
您的程序练习未定义的行为,并且执行此类程序的结果未定义:
完全未定义的行为意味着什么:任何事情都可能发生。
您希望发生特定事情是不正确的。