对链表执行无限插入操作会出现哪些问题?
链表无限插入相关问题解答
问题1:无限执行链表插入操作,堆是否会被占满?
- 首先要看链表节点的内存分配方式:如果节点是通过
malloc、new等动态内存分配接口从堆上申请空间,那么一定会出现堆被占满的情况。 - 核心原因是系统为进程分配的堆空间有明确上限,就算加上交换分区的扩展空间,总可用内存也存在物理上限。无限插入意味着持续申请新内存却不释放,最终会耗尽所有可用堆内存,后续的内存分配请求会直接失败(C语言中
malloc返回NULL,C++中new默认抛出std::bad_alloc异常)。 - 如果节点是在栈上分配的,那堆不会被占满,但插入操作会先触发栈溢出,程序直接崩溃。
问题2:无限插入是否会导致链表循环?
- 不会,链表循环和插入次数没有任何关系,纯粹是代码逻辑错误导致的。
- 只要你的插入逻辑是正确的:每次为新节点申请内存后,将新节点的后继指针置为
NULL,再挂载到链表的尾部/对应位置,那无论插入多少次都不会出现循环。 - 只有当插入逻辑存在问题时才会出现循环,比如错误地将新节点的后继指针指向了链表中已经存在的节点(比如误写为指向头节点),这种情况下哪怕只插入1次也会出现链表循环。
内容的提问来源于stack exchange,提问作者abhi developer
相关产品推荐
相关产品推荐

