简单链表 C 代码分段错误



我正在为我的基本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);
            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("nnodetNametMarks");
            while(curr){
                    printf("n%dt%st%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);
    }

一些错误:

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

添加的第一个节点使用单个字符''作为名称,此时应传递字符串:

head = curr = addnode("", 0.0);

而且这并不指向第一个节点,它指向第二个节点:

curr = head -> next;

应该是:

curr = head;

我不知道你打算用StdName做什么,但正如 hmjd 所说,它应该初始化为某个值。

char StdName[] ="stdname";

head = curr = addnode('',0.0);行无效。addnode函数需要指向字符数组的指针作为第一个参数。 '' 是等于 0 的整数值。将name传递给strcpy,将其用作指向源数据的指针。由于指针为 0 (== NULL),因此会出现崩溃。

相关内容

  • 没有找到相关文章

最新更新