weixin_40339973
qxc邱
采纳率100%
2017-11-23 13:16

关于codeblocks的,出现停止工作的问题

5
已采纳

最近在codeblocks上写了一个关于数据结构的单链表的代码,但是运行的时候总是运行到一半就会出现停止工作,并且显示出现了一个问题,导致程序停止正常工作。。。的字样,拿我同学的代码来运行,在人家的电脑上运行的好好地,在我上面却报错,改掉了错误还和刚才一样,请问路过的大神是怎么回事啊这是

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 4年前

    你的程序的指针分配估计有问题,但是因为vc++和gcc内存分布不同,所以潜在的问题可能在人家那里没有暴露出来。

    然而单链表的程序网上搜索下有大把,不需要非要抄你同学的那个。

    采纳了,可以给你一个程序。

    点赞 3 评论 复制链接分享
  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 4年前
     #include <stdio.h>  
    #include <stdlib.h>  
    
    typedef int ElemType;  
    
    //定义结点类型   
    typedef struct Node {  
        ElemType data;              //单链表中的数据域   
        struct Node *next;          //单链表的指针域   
    }Node,*LinkedList;  
    
    
    //单链表的初始化  
    
    LinkedList LinkedListInit() {  
        Node *L;  
        L = (Node *)malloc(sizeof(Node));   //申请结点空间   
        if(L == NULL) { //判断是否有足够的内存空间   
            printf("申请内存空间失败\n");  
        }  
        L->next = NULL;                  //将next设置为NULL,初始长度为0的单链表   
        return L;  
    }  
    
    
    //单链表的建立1,头插法建立单链表  
    
    LinkedList LinkedListCreatH() {  
        Node *L;  
        L = (Node *)malloc(sizeof(Node));   //申请头结点空间  
        L->next = NULL;                      //初始化一个空链表  
    
        ElemType x;                         //x为链表数据域中的数据  
        while(scanf("%d",&x) != EOF) {  
            Node *p;  
            p = (Node *)malloc(sizeof(Node));   //申请新的结点   
            p->data = x;                     //结点数据域赋值   
            p->next = L->next;                    //将结点插入到表头L-->|2|-->|1|-->NULL   
            L->next = p;   
        }  
        return L;   
    }   
    
    
    //单链表的建立2,尾插法建立单链表  
    
    LinkedList LinkedListCreatT() {  
        Node *L;  
        L = (Node *)malloc(sizeof(Node));   //申请头结点空间  
        L->next = NULL;                  //初始化一个空链表  
        Node *r;  
        r = L;                          //r始终指向终端结点,开始时指向头结点   
        ElemType x;                         //x为链表数据域中的数据  
        while(scanf("%d",&x) != EOF) {  
            Node *p;  
            p = (Node *)malloc(sizeof(Node));   //申请新的结点   
            p->data = x;                     //结点数据域赋值   
            r->next = p;                 //将结点插入到表头L-->|1|-->|2|-->NULL   
            r = p;   
        }  
        r->next = NULL;   
    
        return L;     
    }  
    
    
    //单链表的插入,在链表的第i个位置插入x的元素  
    
    LinkedList LinkedListInsert(LinkedList L,int i,ElemType x) {  
        Node *pre;                      //pre为前驱结点   
        pre = L;  
        int tempi = 0;  
        for (tempi = 1; tempi < i; tempi++) {  
            pre = pre->next;                 //查找第i个位置的前驱结点   
        }  
        Node *p;                                //插入的结点为p  
        p = (Node *)malloc(sizeof(Node));  
        p->data = x;   
        p->next = pre->next;  
        pre->next = p;  
    
        return L;                             
    }   
    
    
    //单链表的删除,在链表中删除值为x的元素  
    
    LinkedList LinkedListDelete(LinkedList L,ElemType x)  
    {  
        Node *p,*pre;                   //pre为前驱结点,p为查找的结点。   
        p = L->next;  
        while(p->data != x) {              //查找值为x的元素   
            pre = p;   
            p = p->next;  
        }  
        pre->next = p->next;          //删除操作,将其前驱next指向其后继。   
        free(p);  
        return L;  
    }   
    
    
    int main() {  
        LinkedList list,start;  
        printf("请输入单链表的数据:");   
        list = LinkedListCreatH();  
        for(start = list->next; start != NULL; start = start->next) {  
            printf("%d ",start->data);  
        }  
        printf("\n");  
        int i;  
        ElemType x;  
        printf("请输入插入数据的位置:");  
        scanf("%d",&i);  
        printf("请输入插入数据的值:");  
        scanf("%d",&x);  
        LinkedListInsert(list,i,x);  
        for(start = list->next; start != NULL; start = start->next) {  
            printf("%d ",start->data);  
        }  
        printf("\n");  
        printf("请输入要删除的元素的值:");  
        scanf("%d",&x);  
        LinkedListDelete(list,x);   
        for(start = list->next; start != NULL; start = start->next) {  
            printf("%d ",start->data);  
        }  
        printf("\n");  
    
        return 0;  
    }
    
    点赞 1 评论 复制链接分享
  • maye_C maye_C 4年前

    程序停止工作的情况有很多种。出现数组越界或者野指针的情况多一点。认真检查下代码吧。

    点赞 评论 复制链接分享