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

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

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

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

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

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

 #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;  
}