c - 简单链表C代码段错误

标签 c linked-list segmentation-fault

我正在为我的基本 C 作业制作一个链表程序。 但是,我总是会在 .exe 上遇到强制关闭错误,并在 Ubuntu 上遇到段错误。

我尝试将其分解并重写,但我不知道代码在哪里失败。

非常感谢您的帮助。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


    struct node{
            char name[20];
            int mark;
            struct node *next;

    };

    struct node *addnode(char name[], float mark);


    int main(void){

            int j = 0;
            char StdName[10];
            float StdMarks;

            struct node *head = NULL;
            struct node *curr = NULL;

            head = curr = addnode('\0',0.0);

            for(j=0; j<3; j++){

                    printf("\nEnter StdName >>");

                    printf("\nMarks for %s >>", StdName);


                    curr -> next = addnode("", 5.5);
                    curr = curr->next;
            }

            curr = head -> next;

            j = 0;

            printf("\nnode\tName\tMarks");

            while(curr){

                    printf("\n%d\t%s\t%5.2f", j++, curr->name, curr->mark);
                    curr=curr->next;
            }

    return 0;

    }

    struct node *addnode(char name[], float mark){

            struct node *temp;

            temp=(struct node*)malloc(sizeof(struct node));
            strcpy(temp->name,name);
            temp->mark=mark;
            temp->next=NULL;

    return (temp);
    }

最佳答案

一些错误:

  • '\0' 不是 char[],而是值为 0char 并且转换为 char*(NULL 指针)。使用 "" 表示空字符串。编译器应该对此发出警告。使用最高警告级别进行编译,并将警告视为错误(因此您不能忽略它们)。对于gcc,标志是-Wall -Werror
  • StdName 未初始化,也从未填充,但在 printf("%s") 调用中使用。

关于c - 简单链表C代码段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13659598/

相关文章:

c - 静态结构无法正常工作

c - 链表中的字符串问题。字段被最后一个节点的输入覆盖

c++ - OS X 上的 std::locale 段错误,无法在任何其他平台上重现

c - 为什么会出现内存泄漏(此初始化导致的段错误)?

c - 如何创建我自己的新扩展?

C中的CRC表算法,宽度限制

c - 打印一个字符数组,但不希望结尾

java - 构造子串的字符串操作

c - free on malloc'ed 数组段错误

c - Arduino红外未进入IF