如果我使用malloc()
分配内存,而不使用free()
取消分配内存,
记忆。为什么仅仅通过覆盖先前的内容就不能被其他程序访问
void main()
{
int *a; //here a is holding a junk value
MALLOC(a,1,int);
*a=100; //a is holding 100
MALLOC(a,1,int);
*a=200; //a is holding 200
/* so memory location where the value 100 is stored is inaccessible
cannot be reused */
//why can't we just over write that memory space when used next time
}
答案 0 :(得分:2)
您使用的是一个非常奇怪的宏,标准C中的分配为:
int * const a = malloc(sizeof *a);
if (a != NULL)
{
*a = 100;
}
然后完成第二个分配,而无需调用free()
,并覆盖a
的内容;这非常糟糕,因为它会泄漏内存。这就是为什么我在上面将其声明为* const
的原因,以表示通常不应使用指针变量,因为我们要保留其值。
当程序结束时,在典型的现代系统上,该进程使用的所有资源将被操作系统回收,并且内存将用于其他用途。
调用free()
的需要主要是关于程序运行时 完成的分配,如果重复发生分配,则该过程只会越来越多。
答案 1 :(得分:-1)
Malloc返回一个指向已分配内存块的指针。
int *a;
a= (int *) malloc(sizeof *a);
在这种情况下,malloc返回一个指向大小为“ a”个字节的块的指针,并且将“ a”设置为等于该大小。
现在就再做一次
a= (int *) malloc(sizeof *a);
您不是在同一指针上使用malloc。您正在调用malloc()
(分配空间并返回指向该空间的指针),并将其返回值分配给同一指针对象。
如果您实际上想使用带有相同指针的malloc,您可能会对realloc函数感兴趣:
int *a;
a = malloc(sizeof *a);
a = realloc(a, 10 * sizeof(a));