Bre*_*ius -4 c malloc free dynamic-memory-allocation
我有两个问题.
freeC 中的函数如何工作?这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
int *p;
p = (int *)malloc(sizeof(int));
*p = 10;
int *q = p;
printf("p:%d\n", p);
printf("q:%d\n", q);
printf("*p:%d\n", *p);
printf("*q:%d\n", *q);
free(p);
printf("Memory freed.\n");
p = (int *)malloc(sizeof(int));
*p = 19;
printf("p:%d\n", p);
printf("q:%d\n", q);
printf("*p:%d\n", *p);
printf("*q:%d\n", *q);
}
Run Code Online (Sandbox Code Playgroud)
为什么输出是这样的?
p:2067804800
q:2067804800
*p:10
*q:10
Memory freed.
p:2067804800
q:2067804800
*p:19
*q:19
Run Code Online (Sandbox Code Playgroud)
一旦调用free()了malloc()-ed指针,内存(返回的指针)就可以通过对malloc()family的任何后续调用重新分配.这是关键所在free().
引用C11,章节§7.22.3.3
该
free函数使得指向的空间ptr被释放,即可用于进一步分配.[....]
所以,很有可能,free()在你malloc()再次为相同数量的内存使用相同的指针之后,返回相同的指针.毫无疑问.
(谁知道,如果你的编译器足够智能,它实际上可以删除无效的free(p);和p = (int*)malloc(sizeof(int));完全无效的)
接下来,在代码的最后一行,
printf("*q:%d\n", *q);
Run Code Online (Sandbox Code Playgroud)
您通过尝试访问(取消引用)已经空闲的内存来调用未定义的行为.不要那样做.
那说,
%p格式说明符并将参数转换为void*.malloc()和家人的回报值C..| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |