2

基本的な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);
    }
4

3 に答える 3

1

追加する最初のノードでは'\0'、文字列を渡す必要があるときに、名前に 1 つの文字を使用します。

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

また、これは最初のノードを指すのではなく、2 番目のノードを指します。

curr = head -> next;

次のようにする必要があります。

curr = head;

何をするつもりだったのかわかりませんStdNameが、hmjdが言ったように、何らかの値に初期化する必要があります。

char StdName[] ="stdname";
于 2012-12-01T12:52:37.693 に答える
1

いくつかの間違い:

  • '\0'ではなく、char[]charが であり、 (ポインタ)0に変換されるです。空の文字列に使用します。コンパイラはこれに対して警告を発する必要がありました。警告レベルを最大にしてコンパイルし、警告をエラーとして扱います (したがって、警告を無視することはできません)。フラグは.char*NULL""gcc-Wall -Werror
  • StdNameは初期化されておらず、入力もされていませんが、printf("%s")通話で使用されています。
于 2012-12-01T12:52:45.177 に答える
0

head = curr = addnode('\0',0.0);行が無効です。関数addnodeは、最初のパラメーターとして文字配列へのポインターを想定しています。'\0'は 0 に等しい整数値です。これをソース データへのポインタとして使用する にname渡します。strcpyポインタが 0 (== NULL) であるため、クラッシュします。

于 2012-12-01T12:54:31.183 に答える