执行函数后程序全部退出

执行完以下代码后程序直接全部退出是咋回事,以下代码为自建函数。

bool Delete_List(LinkList &L,int n)
{
    LinkList p,q;
    if(L==NULL||L->next==NULL)  //链表本身要存在 
    {
        printf("链表不存在或者链表不能删除");
        return false;
    }
    p=Locate_Find_List(L,n-1);
    if(p==NULL||p->next==NULL)  //判断P是否赋值成功 
    {
        printf("未查找到第%d个位置",n);
        return false;
    }
    else
    {
        q=p->next;  //将p->next的地址给q 
        p->next=q->next;   
         free(q);  //删除q节点 
        printf("删除成功!"); 
        return true;
    }
}

调试方式运行程序,出错了会停留在报错的行,检查对应的指针变量。还有free是不是重复释放

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7406876
  • 这篇博客你也可以参考下:回溯法解决部落冲突问题
  • 除此之外, 这篇博客: 常用数据结构与经典算法 简单讲解与示例代码中的 双向链表示例代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 代码(C语言)
    双向链式线性表 Visual Studio 2019

    /**
     * 数据结构 C语言 双向链式线性表
     * @FileName									Dual_LinkedList.c
     * @author										W.Lionel.Esaka
     */
    
    #define _CRT_SECURE_NO_WARNINGS
    
    #include <stdio.h>
    #include <stdlib.h>
    
    enum status {
    	Error = 0,
    	Corrrect = 1,
    	Overflow = -1
    };
    enum status Status;
    typedef char ElemType;
    
    typedef struct DualList {
    	ElemType data;
    	struct DualList* Previous;
    	struct DualList* Next;
    }DualNode, * DualLinkList;
    
    /*创建指定长度链表  尾插法*/
    //如果链表为空,则创建一个链表,指针域指向自己
    void ListInit(DualNode** p,int Number)
    {
    	DualNode* temp;
    	DualNode* target;
    	int i;
    	printf("输入节点的值,输入0结束\n");
    	for (i = 0; i < Number; i++)
    	{
    		if (*p == NULL)   //如果输入的链表是空。则创建一个新的节点,使其next指针指向自己  (*head)->next=*head;
    		{
    			*p = (DualNode*)malloc(sizeof(DualNode));
    			if (!*p) exit(0);
    			(*p)->data = (char)(i + 65);
    			(*p)->Next = *p;
    			(*p)->Previous = *p;
    		}
    		else
    		{
    			for (target = *p; target->Next != *p; target = target->Next);//寻找尾节点
    			temp = (DualNode*)malloc(sizeof(DualNode));
    			if (!temp)exit(0);
    			temp->data = (char)(i + 65);
    			temp->Next = *p;						//新节点指向头节点
    			(*p)->Previous = temp;
    			target->Next = temp;					//尾节点指向新节点
    			temp->Previous = target;
    		}
    	}
    }
    
    /*插入元素*/
    void ListInsert(DualNode** list, int Position)
    {
    	DualNode* p, * target, * temp;
    	int i;
    	ElemType item;
    
    	printf("请输入所要插入的数据:\n");
    	scanf("%d", &item);
    	fflush(stdin);
    
    	if (Position == 1)
    	{
    		temp = (DualNode*)malloc(sizeof(DualNode));
    		if (!(temp))
    			return Error;
    
    		temp->data = item;
    		for (target = (*list); target->Next != (*list); target = target->Next);
    
    		temp->Next = (*list);
    		target->Next = temp;
    		(*list)->Previous = temp;
    		(*list) = temp;
    	}
    	else
    	{
    		target = (*list);
    		for (i = 1; i < (Position - 1); i++)
    		{
    			target = target->Next;
    		}
    
    		temp = (DualNode*)malloc(sizeof(DualNode));
    		if (!(temp))
    			return Error;
    
    		temp->data = item;
    		p = target->Next;
    		target->Next = temp;
    		temp->Next = p;
    		p->Previous = temp;
    		temp->Previous = target;
    	}
    }
    
    /*删除元素*/
    void ListDelete(DualNode** list, int Position)
    {
    	DualNode* temp, * target;
    	int i = 1;
    
    	if (Position == 1)
    	{
    		for (target = (*list); target->Next != (*list); target = target->Next);
    
    		temp = *list;
    		(*list) = (*list)->Next;
    		target->Next = (*list);
    		(*list)->Previous = target;
    		free(temp);
    	}
    	else
    	{		//删除其他节点
    		for (i = 1, target = *list; target->Next != *list && i != Position - 1; target = target->Next, i++); 
    		if (target->Next == *list)		
    		{
    			for (target = *list; target->Next->Next != *list; target = target->Next);
    			temp = target->Next;												 
    			target->Next = *list;
    			(*list)->Previous = target;
    			free(temp);
    		}
    		else
    		{
    			temp = target->Next;
    			target->Next = temp->Next;	
    			temp->Next->Previous = target;
    			free(temp);
    		}
    	}
    }
    
    /*查找元素*/
    int ListSearch(DualNode* list, int Elem)
    {
    	DualNode* target;
    	int i = 1;
    
    	for (target = list; target->data != Elem && target->Next != list; i++)
    	{
    		target = target->Next;
    	}
    
    	if (target->Next == list && target->data != list->data)
    	{
    		return Error;
    	}
    	return i;
    }
    
    /*遍历链表 正序*/
    void ListDisplayForward(DualNode* list)
    {
    	DualNode* target;
    	target = list;
    	do {
    		printf("%c\t", target->data);
    		target = target->Next;
    	} while (target != list);
    	printf("\n\n");
    }
    
    /*遍历链表 逆序*/
    void ListDisplayBackward(DualNode* list)
    {
    	DualNode* target;
    	target = list->Previous;
    	do {
    		printf("%c\t", target->data);
    		target = target->Previous;
    	} while (target != list->Previous);
    	printf("\n\n");
    }
    
    /*字母表给定顺序输出*/
    void ListDisplayAlphabet(DualNode* list, int Position)
    {
    	DualNode* target;
    	target = list;
    	int i = 0;
    	if (Position > 0)
    	{
    		for(i = 1; i <= Position;i++)
    		target = target->Next;
    	}
    	if (Position < 0)
    	{
    		i = abs(Position);
    		for (i = 1; i <=abs(Position); i++)
    		{
    			target = target->Previous;
    		}
    	}
    	i = 1;
    	do {
    		printf("%c\t", target->data);
    		target = target->Next;
    		i++;
    	} while (i <= 26);
    	printf("\n\n");
    }
    
    /*入口*/
    void main()
    {
    	DualNode* list = NULL;
    
    	ListInit(&list, 26);
    	ListDisplayForward(list);
    	ListDisplayBackward(list);
    
    /*	ListInsert(&list, 5);
    	ListInsert(&list, 6);
    	ListDisplayForward(list);
    	ListDisplayBackward(list);
    
    	ListDelete(&list, 5);
    	ListDelete(&list, 6);
    	ListDisplayForward(list);
    	ListDisplayBackward(list);*/
    
    	ListDisplayAlphabet(list, 52);
    	ListDisplayAlphabet(list, 3);
    	ListDisplayAlphabet(list, -3);
    }