2012-08-06 45 views
2

雖然這樣做時編譯器不顯示任何錯誤,但我在執行此操作時遇到了分段錯誤。 如果我提出非常基本的問題,請原諒我,因爲我不擅長編寫C語言及其很長一段時間。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; 
    } 
} 

的,我想送x的指針,我想要做的就是創建一個鏈接列表節點和擴展的鏈接列表中,如果輸入總和小於100,是什麼,y(節點的成員)轉換爲一個函數,該函數在輸入並將輸入存儲到它們之後返回它們的總和。

但我認爲我在傳遞指針或添加指針時做錯了。

問候

回答

1

xy已經指針,所以這一點:整型

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

// ^地址*

應該是:

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

在代碼你寫了,你讀入了int指針例如,覆蓋int的地址,然後將其解引用(在添加中),這會導致分段錯誤。

+0

就解決分割問題,但現在我不能添加指針,那裏有錯誤'無效的操作數爲二進制+(有「詮釋*」和「詮釋*」:你應該在你的主要功能有這些'你能幫我解決這個問題嗎 – pahnin 2012-08-06 04:46:35

+0

從你的評論我假設你試着做'z = x + y;'這是添加到指針,這是無效的,你仍然應該解除引用它們:'z = * x + * y ;' – MByD 2012-08-06 04:48:17

+0

我這樣做,第一,然後我得到這個輸出'輸入X:2 輸入y:3 37281808 + 37281812Enter X: ' – pahnin 2012-08-06 04:54:06

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; 
}