将链表传递给 struct 函数我做错了什么?

Pass linked list to function with struct what I doing wrong?

我想将喜欢的列表传递给函数并创建新列表。我需要一些帮助来了解我做错了什么。 我创建新指针并将指针复制到列表中的“curr”和 运行 并内置。 我试着找出我在哪一步做错了。我已经尝试调试程序了。

结构是简单的结构如果i、j和矩阵A的值是算术级数它们被添加到列表中。

int createList(int A[][COLS], list** lst, int rows, int cols)
{
// your code:
*lst = (list*)calloc(1, sizeof(list));
list* curr = *lst;
int i, j;
int counter = 0;
int d; 
int check = 0;
int j_i;
int A_j;
four new_four;
for (i = 0; i < rows; i++) {
    for (j = 0; j < cols; j++) {
        j_i = j - i;
        A_j = A[i][j] - j;
        if (j_i == A_j) {
            d = j-i;
            new_four = createFour(i, j, d, A[i][j]);

            if (counter == 0) {
                curr = createElement(new_four);

            }
            counter++;
            curr->next = createElement(new_four);
            curr = curr->next;

        }
    }
}
curr->next = NULL;

return counter;
}

// 使用所有参数创建新对象

    four createFour(int i, int j, int d, int value)
{
    four new_f;;
    new_f.d = d;
    new_f.i = i;
    new_f.j = j;
    new_f.value = value;
    return new_f;
}

// 使用列表中的数据创建新元素

list* createElement(four data)
{
// your code:
list* new_Element = (list*)calloc(1, sizeof(list));
new_Element->data = data;
new_Element->next = (list*)calloc(1, sizeof(list));
return new_Element;
}

问题是您实际上并没有通过 lst 参数传回列表。您正在分配一个值并正确存储它,但随后没有使用该值来添加您想要的所有数据,因为您从未真正使用过它,而是创建了一个完全不同的列表,这会导致内存泄漏。

问题归结到这部分

        if (counter == 0) {
            curr = createElement(new_four);

        }
        counter++;
        curr->next = createElement(new_four);
        curr = curr->next;

counter 为 0 时,您创建了一个新列表的开始 - 这是您要存储到 *lst 中以传递回调用代码的值。 当我想您只需要 1 个时,您还创建了 2 个节点。

只要稍作调整,您就会得到想要的结果。

        if (counter == 0) {
            *lst = curr = createElement(new_four);

        } else {
            curr->next = createElement(new_four);
            curr = curr->next;
        }
        counter++;

您还需要删除函数开头的这一行,因为不需要它

*lst = (list*)calloc(1, sizeof(list));

并且您也不需要在这里将 *lst 分配给 curr,因为它是稍后启动的

list* curr = *lst;