不寻常的Seg故障:无法在全局范围内声明变量?

时间:2014-02-12 02:32:54

标签: c linked-list segmentation-fault global-variables

我在一个c程序上工作了几个小时,这个程序将循环5次,而用户输入5个整数作为链表。不知怎的,我不能在我的主要声明变量而不会在print函数中出现分段错误。

我的typedef:

typedef struct node_{
    int value;
    struct node_* next;
}node;

int y = 0; //If this is made local in main, seg fault

我的主要

int main(void)
{
    node *head;
    int x;
    //int y; /*Does not work here*/
    while(y < 5)
    {
        printf("Insert: ");
        scanf("%d", &x);

        head = insert_top(head, x);
        print(head);
        y ++;
    }
    free(head);
    return 0;
}

我的插入功能

node* insert_top(node* head, int value)
{
    node *newHead;
    newHead = malloc(sizeof(node));

    newHead->value = value;

    if(head == NULL)
    {
        head = newHead;
        head->next = NULL;
        return head;
    }
    else
    {
        newHead->next = head;
        head = newHead;
        return head;
    }
}   

我的打印功能

void print(node* head)
{
    if(head == NULL)
    {
        printf("List is empty\n");
        return;
    }
    else
    {
        while(head != NULL)
        {
            printf("%d->", head->value);
            head = head->next;
        }
        printf("NULL\n");
    }
}

由于某种原因,如果我将程序设置为循环,直到用户输入一个数字,比如-1,程序就没问题了。但是我不能在没有出现seg错误的情况下声明任何其他整数(即使它们没有用)。任何人都可以帮我弄清楚为什么会发生这种情况以及我能做些什么来解决它?我希望能够走上这条道路,但不一定说出答案。

1 个答案:

答案 0 :(得分:1)

node *head = NULL;
int y = 0; /*Does not work here*/

请在main进行上述更改并删除y的全球声明。