C结构段溢出

时间:2014-10-01 20:04:49

标签: c pointers linked-list structure

我在C中有一个程序,它创建了一个两部分的单链表 我使用结构来生成列表,节点和节点数据。 结构定义为

struct TList {
    struct LNode* first;
    struct LNode* last_left;
};

struct LNode {
    struct LData* data;
    struct LNode* next;
};

该列表看起来像[ A B C ][ D E ] 哪里, list->first = "A"list->last_left = "C"

以下函数重置链接列表中的光标。

void reset_list_cursor(struct TList *list) {

    struct LNode *temp, *temp1, *temp2;
    int i = (list_left_size(list) - 1 );

    for (i; i >= 0; i--) {

        temp = list->last_left;
        temp1 = list->first;

        if (temp != NULL) {

            temp2 = temp1->next;
            while (temp2 != temp) {
                temp1 = temp1->next; 
                temp2 = temp2->next;
            }

            list->last_left = temp1;
        }
    }
    list->last_left = NULL;
}

但是,我遇到了分段错误,我已将其缩小到以下几行......

void reset_list_cursor(struct TList *list) {

    temp1 = temp1->next; 
    temp2 = temp2->next;

我知道你永远不能打电话给temp = temp->next->next,但是当你创建一个代替temp->next的结构时,它不应该起作用吗?

1 个答案:

答案 0 :(得分:0)

首先,temp没有问题 - >下一个 - >接下来,它的语法也是正确的。在任何涉及循环的情况下,你必须确保你要检查" next"进入它时是否为null。包括检查是否为temp的条件 - >进入循环时,next == NULL。这将为你创造奇迹。

这就像while(temp1->next!=NULL && temp2->next!=NULL)

希望这会有所帮助。