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