C-链接列表分割故障


typedef struct node{
int data;
struct node *link;
}nd;
nd *head=NULL , *ahead=NULL;
void create_node(int item) {
    nd *new, *temp;
    new = (nd*)malloc(sizeof(nd));
    new->data=item;
    new->link=NULL;
    if(head==NULL) {
        head=new;
    }
    else {
        temp=head;
        while(temp->link!=NULL) {
            temp=temp->link;
        }
        temp->link=new;
    }
}
void alpha_check(int size) {
    int i,j,num;
    nd *ti , *tj;
    ti=tj=head;
    for(i=1 ; i<=size ; i++) {
        for(j=1 ; j<=size ; j++) {
            num = ((ti->data)*10)+(tj->data);
            tj=tj->link;
            /*if(num>=65 && num<=90) {
                   printf("n->%d",num);
              }*/
        }
     //ti=ti->link;
    }
}
void traverse(nd *thead) {
    while(thead->link!=NULL) {
        printf("%d ",thead->data);
        thead=thead->link;
    }
    printf("%d ",thead->data); 
}

因此,以上代码中的唯一问题在于函数 alpha_check()我想要变量 tj 指向下一个节点。而不是指向下一个节点,它给我分割故障(核心倾倒)。请解释为什么我不能将TJ指向下一个节点。

分割故障是向内核的信号,表明您的程序正在访问内存,表明它无权导致内核终止您的程序。这通常意味着您超出了数组的界限,或者在您的情况下,您要指出指向它不应该的指针。就像其他人在他们的评论中所暗示的那样,您需要具有与遍历数组时的链接列表相比,在穿越链接列表的同时,需要具有不同类型的约束。您需要在检查节点指针不是空的时穿越,而不是在循环中进行一些固定尺寸。

我已经对您的Alpha_Check过程进行了更改,并添加了一个用于测试它的主。它可以按照您的期望。

#include <stdio.h>
#include <stdlib.h>
typedef struct node {
    int data;
    struct node* link;
} nd;
nd *head=NULL , *ahead=NULL;
void create_node(int item) {
    nd* new,* temp;
    new = (nd*)malloc(sizeof(nd));
    new->data = item;
    new->link = NULL;
    printf("%d %pn", new->data, new);
    if(head == NULL) {
        head = new;
    }
    else {
        temp = head;
        while(temp->link)
            temp = temp->link;
        temp->link = new;
    }
}
void alpha_check(int size) {
    int i,j,num;
    nd* ti ,* tj;
    ti = tj = head;
    for(i = 1 ; i <= size ; i++) {
        while(tj) {
            num = ti->data * 10 + tj->data;
            tj = tj->link;
         //if(num>=65 && num<=90)
         //{
            printf("n->%d",num);
            printf(" %pn", tj);
         //}
     }
     //ti=ti->link;
    }
}
void traverse(nd* thead) {
    while(thead->link) {
        printf("%d ", thead->data);
        thead = thead->link;
    }
    printf("%d ", thead->data);
}
int main(void) {
    create_node(10);
    create_node(1);
    create_node(5);
    alpha_check(2);
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新