2

これを行っているときにセグメンテーション違反が発生しますが、コンパイラーはエラーを表示しません。私は非常に基本的な質問をしている場合は、私を許してください.Cでのコーディングが苦手で、長い間.

これが私のコードです:

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

struct link_list {
    int x;
    int y;
    struct link_list *next;
    struct link_list *prev;
};

int inp_sum (int *x, int *y){
        printf("Enter x:");
        scanf("%d",&x);
        printf("Enter y:");
        scanf("%d",&y);
    printf("%d+%d",x,y);
    int z;
    z=*x+*y;
    return z;
}

void main(){
    struct link_list *first_node;
    first_node=malloc(sizeof(struct link_list));
    first_node->next=0;
    first_node->prev=0;

    struct link_list *cur;
    cur = malloc(sizeof(struct link_list));
    while(inp_sum(&cur->x,&cur->y)<100){
        cur->next=malloc(sizeof(struct link_list));
        cur=cur->next;
        cur->next=0;
        cur->prev=0;
    }

    print_llist(first_node);
}

print_llist(struct link_list *root){
    struct link_list *current;
    current=malloc(sizeof(struct link_list));
    current = root;
    while ( current != NULL ) {
        printf( "%d\n", current->x );
        current = current->next;
    }
}

私がしたいのは、リンク リスト ノードを作成し、入力の合計が 100 未満の場合はリンク リストを拡張することです。そのために、x、y(ノードのメンバー) のポインターを、取得後に合計を返す関数に送信します。入力し、それらへの入力を保存します。

しかし、ポインターを渡したり、ポインターを追加したりするときに、これは間違っていると思います。

よろしく

4

2 に答える 2

1

xでありy、既にポインターであるため、次のようになります。

    printf("Enter x:");
    scanf("%d",&x);
    //         ^ address of int *
    printf("Enter y:");
    scanf("%d",&y);

        // ^ int のアドレス *

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

    printf("Enter x:");
    scanf("%d",x);
    //         ^ address of int
    printf("Enter y:");
    scanf("%d",y);
    //         ^ address of int

あなたが書いたコードでは、int ポインターを読み取ります。たとえば、int のアドレスをオーバーライドし、(さらに) それを逆参照すると、セグメンテーション違反が発生します。

于 2012-08-06T04:31:05.403 に答える
0

修正が必要なエラーがいくつかあります。

** ここで scanf パーツが問題を起こしています。彼らは次のようにする必要があります

scanf("%d",x);
scanf("%d",y);

**first_node何かに接続する必要があります。ダミーヘッドだと思います。したがって、curノードを導入した後、 first_node->next = cur

** このリンクされたリストの各ノードは何にも接続されていません。これらをメイン関数に含める必要があります。

while(inp_sum(&cur->x,&cur->y)<100){
    cur->next=malloc(sizeof(struct link_list));
    struct link_list *temp = cur;
    cur=cur->next;
    cur->next=0;
    cur->prev=temp;
}
于 2012-08-06T04:59:21.900 に答える