Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
链接列表分段错误 typedef结构节点{ int数据; 结构节点*链接; }钕; nd*head=NULL,*head=NULL; 无效创建_节点(int项){ nd*新,*温度; 新=(nd*)malloc(sizeof(nd)); 新建->数据=项目; 新建->链接=NULL; if(head==NULL){ 头=新的; } 否则{ 温度=水头; while(临时->链接!=NULL){ 温度=温度->链接; } 临时->链接=新建; } } 无效alpha_检查(整数大小){ int i,j,num; nd*ti,*tj; ti=tj=水头; 对于(i=1;idata); tj=tj->link; /*如果(num>=65&&numlink; } } 空心导线测量(nd*THAD){ while(thead->link!=NULL){ printf(“%d”,thead->data); thead=thead->link; } printf(“%d”,thead->data); }_C_Segmentation Fault_Singly Linked List - Fatal编程技术网

链接列表分段错误 typedef结构节点{ int数据; 结构节点*链接; }钕; nd*head=NULL,*head=NULL; 无效创建_节点(int项){ nd*新,*温度; 新=(nd*)malloc(sizeof(nd)); 新建->数据=项目; 新建->链接=NULL; if(head==NULL){ 头=新的; } 否则{ 温度=水头; while(临时->链接!=NULL){ 温度=温度->链接; } 临时->链接=新建; } } 无效alpha_检查(整数大小){ int i,j,num; nd*ti,*tj; ti=tj=水头; 对于(i=1;idata); tj=tj->link; /*如果(num>=65&&numlink; } } 空心导线测量(nd*THAD){ while(thead->link!=NULL){ printf(“%d”,thead->data); thead=thead->link; } printf(“%d”,thead->data); }

链接列表分段错误 typedef结构节点{ int数据; 结构节点*链接; }钕; nd*head=NULL,*head=NULL; 无效创建_节点(int项){ nd*新,*温度; 新=(nd*)malloc(sizeof(nd)); 新建->数据=项目; 新建->链接=NULL; if(head==NULL){ 头=新的; } 否则{ 温度=水头; while(临时->链接!=NULL){ 温度=温度->链接; } 临时->链接=新建; } } 无效alpha_检查(整数大小){ int i,j,num; nd*ti,*tj; ti=tj=水头; 对于(i=1;idata); tj=tj->link; /*如果(num>=65&&numlink; } } 空心导线测量(nd*THAD){ while(thead->link!=NULL){ printf(“%d”,thead->data); thead=thead->link; } printf(“%d”,thead->data); },c,segmentation-fault,singly-linked-list,C,Segmentation Fault,Singly Linked List,因此,上述代码中唯一的问题在于函数alpha_check()中,我希望变量tj指向下一个节点。它不是指向下一个节点,而是给我分段错误(堆芯转储)。 请解释为什么我不能让tj指向下一个节点。分段错误是向内核发出的一个信号,表明您的程序正在访问内存,它没有导致内核终止您的程序的权限。这通常意味着您超出了数组的边界,或者在您的情况下,您正在取消引用我指定的指针s指向不应该指向的内容。与其他注释中提到的内容一样,在遍历链表时,您需要使用与遍历数组时不同的约束类型。您需要在遍历时检查节点指针是否为空,而不

因此,上述代码中唯一的问题在于函数alpha_check()中,我希望变量tj指向下一个节点。它不是指向下一个节点,而是给我分段错误(堆芯转储)
请解释为什么我不能让tj指向下一个节点。

分段错误是向内核发出的一个信号,表明您的程序正在访问内存,它没有导致内核终止您的程序的权限。这通常意味着您超出了数组的边界,或者在您的情况下,您正在取消引用我指定的指针s指向不应该指向的内容。与其他注释中提到的内容一样,在遍历链表时,您需要使用与遍历数组时不同的约束类型。您需要在遍历时检查节点指针是否为空,而不是在for循环中执行某些固定大小的操作

我已经对您的alpha_检查程序进行了更改,并添加了一个main来测试它。它可以按照您的预期工作

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); 
}
#包括
#包括
类型定义结构节点{
int数据;
结构节点*链接;
}钕;
nd*head=NULL,*head=NULL;
无效创建_节点(int项){
nd*新,*温度;
新=(nd*)malloc(sizeof(nd));
新建->数据=项目;
新建->链接=NULL;
printf(“%d%p\n”,新建->数据,新建);
if(head==NULL){
头=新的;
}
否则{
温度=水头;
while(临时->链接)
温度=温度->链接;
临时->链接=新建;
}
}
无效alpha_检查(整数大小){
int i,j,num;
nd*ti,*tj;
ti=tj=水头;
对于(i=1;i数据*10+tj->data;
tj=tj->link;
//如果(num>=65&&numlink;
}
}
空心导线测量(nd*THAD){
while(thead->link){
printf(“%d”,thead->data);
thead=thead->link;
}
printf(“%d”,thead->data);
}
内部主(空){
创建_节点(10);
创建_节点(1);
创建_节点(5);
阿尔法检查(2);
返回0;
}

用于(i=1;我看不到列表是如何创建的,也看不到如何调用
alpha_check
。似乎这个
size
是错误的。在列表结束之前,使用大小而不是while循环遍历列表也很奇怪。使用调试器。它会告诉您哪里出了问题以及发生了什么。您传递给函数alpha_ch的大小是多少eck?如果您创建的结构包含头指针和一些跟踪列表大小的变量,则可以使用大小为的for循环。
struct list{size\u t size;nd*head;}
您还可以使用for循环而不是while循环来检查指针是否为空
for(tj=head;tj;tj=tj->link)
#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 %p\n", 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(" %p\n", 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;
}