gpt4 book ai didi

c - C代码-malloc和免费

转载 作者:行者123 更新时间:2023-12-04 07:07:29 26 4
gpt4 key购买 nike

考虑下面的代码:

int main()

{

int *a,address,size;

a= (int *) malloc(10);
address=(int*) a-1;
size=(int ) *(a-1); // sorry there was a bug wrong casting, now its corrected.
printf("address of malloc n:%d\n",address);
printf("size of malloc block b:%d\n",size);
printf("before%p",a);
a=a+1;
printf("\n after%p",a);
free(a);

getch();

}


malloc“ a”的地址递增,然后释放(a + 1)。它将导致内存泄漏,但是释放将如何知道终点,直到它必须释放,这样才不会错误地释放下一块内存?是否有类似Char Array-'\ 0'的结束标记?

我在K&R的第8章第8.7节中读到free维护了一个列表,free从列表中知道free将添加回free memory块。

malloc从哪个表中声明了任何大小?那么上面的代码将如何工作,我想这就是免费列表出现了吗?它只是要添加免费的链接列表,即仅对单词添加a + 1。并忽略其他会导致内存泄漏的内存位置。

但是,当您执行malloc()时,我读到它返回一个指针1,并将给出已分配的malloc块的大小,对吗?

谁能详细解释一下?

问题与守则无关。它是Malloc和free函数相互配合的确切方式。如果我说free(a),free函数将如何确切知道块的结尾?

最佳答案

您处于未定义行为的领域。

必须按照标准将Free传递给malloc返回的指针:


free函数使ptr指向的空间为
释放,即可供进一步分配。如果ptr
为空指针,不执行任何操作。否则,如果参数确实
与早期由calloc,malloc或返回的指针不匹配
realloc函数,或者是否已通过调用释放空间
free或realloc,行为未定义。


-1988年ANSI标准

4.10.3.2节:自由功能

关于c - C代码-malloc和免费,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8466743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com