【发布时间】:2014-04-18 14:36:24
【问题描述】:
我希望这个问题不会在讨论中过于重视,而是在一个明确的答案上。
我在大学学习了 C 语言,并且刚刚开始编写我的第一个有用的程序(意思是没有规范)。我只是偶然发现了一个到目前为止我还没有处理过的问题,我认为他们在讲座中没有提到它:
当我分配可能会调整大小的内存时,我不应该存储指向该分配空间地址的指针。因为当我重新分配时,空间可能会移动到不同的位置,这使得指向该区域的每个指针都毫无价值。这让我得出结论,我不能在空间内存储一个链表,每个元素都“生活”在这个空间的某个地方,因为重新分配可能会使所有的 'next' 和 'prev' 指针无效。
这是我从未遇到过的问题,这就是为什么我想问您是否有解决方案。具体来说:我有一个共享内存区域,并且想在其中存储我的所有数据,以便不同的进程可以在它上面工作。由于数据(字符串)会频繁添加和删除,并且必须按特定顺序排列,我认为链表是最好的方法。现在我意识到我不能这样做。还是我太盲目而看不到明显的解决方案?你会怎么做? (我不想将整个内容存储在文件中,它应该保留在(主)内存中)
感谢和最好的问候, 菲尔
【问题讨论】:
-
通常你不会调整链表中的元素。您只需添加和删除独立元素。
-
@KerrekSB:我认为他将节点存储在内存缓冲区中,他使用 realloc 调整大小。如果您想将节点存储在进程之间共享的内存缓冲区中,您会遇到类似的问题。
-
如果您需要支持任意顺序的任意添加和删除,您最终将自己实现
malloc。是否有一些移除模式可以用来让事情变得更简单?
标签: c++ c pointers linked-list alloc