gpt4 book ai didi

c - 链表——节点的内存地址

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:01 25 4
gpt4 key购买 nike

我制作了一个基于链表的程序,其中节点通过指针链接在一起。每个节点都包含一个整数,该整数存储一个数字和一个指向下一个节点的指针。队列遵循 FIFO。

一切似乎都很完美!我可以将新节点添加到队列中,也可以删除节点——所有这些都按照先进先出的顺序进行。

该程序是关于动态内存分配的(使用 malloc 和 free 库函数)

那么我的问题是什么?问题是内存是如何工作的,即当这些节点存储在堆上时 - 为什么节点以以下方式存储。

 1 (205888)

2 (206032)

3 (206888)

4 (206904)

5 (215896)

6 (215912)

7 (215928)

这是程序的输出。第一个是存储的整数,括号内是节点的地址。

所以 - 查看节点 5 的地址并将其与较早的节点进行比较 - 内存中似乎发生了一些事情 - 它以千字节为单位的跳跃 - 从 206904 到 215896。

为什么会跳到这里?它有什么含义?难道真的是内存泄漏?还是操作系统和编译器以这种方式组织内存分配???

最佳答案

我假设您在需要创建新节点时使用 malloc 分配内存。在高层次上,malloc 只是给你一 block 内存,可以容纳你要求的数据大小。由于它只是找到可用的内存块,因此不能保证 malloc 在不同调用中返回的内存位置彼此靠近。

只是一个小更新:

我的观点是,只要您释放内存并且不留下/丢失指针,就可以了。内存位置的跳跃无需担心。这对于内存分配来说是正常的,它们并不表示您的程序出现任何问题。

关于c - 链表——节点的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20180538/

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