将链接列表发送到功能

时间:2017-01-12 19:04:24

标签: c struct

嗨我试着编写一个程序,它将返回最小值链表并获得5个节点链表 我用调试器运行它,我注意到由于某种原因,当我将第一个节点发送到我的“搜索列表”函数时,地址和num值只是垃圾,所以我做错了什么? 在我的防守中我很新c:)

 #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct item {
    int num;
    struct item *next;
}item; 

  struct item *addList(struct item **first, int num);
 int searchList(struct item *first);

int main() {

    struct item *first = malloc(sizeof(struct item));
    int n, i;
    printf("Enter 5 numbers: ");
    for (i = 0; i < 5; i++) {
        scanf("%d", &n);
        first = addList(&first, n);
    }

    printf("%d", searchList(first));

}


struct item *addList(struct item **first, int n) {

    struct item *new_node ;
    new_node = malloc(sizeof(struct item));

    if (new_node == NULL)
    {
        printf("/nError, cant allocate memory (addList Function).");
        exit(1);
    }

    new_node->num = n;
    new_node->next = *first;
    *first = new_node;
}

int searchList(struct item *first) {

    struct item *p;
    int min=first->num;
    if (first == NULL)
        return 0;
    for (p = first; p != NULL; p = p->next) {

        if (p->num < min)
            min = p->num;

    }

    return min;
}

2 个答案:

答案 0 :(得分:0)

addList()应该返回一个值,将其分配给first中的main()。但你没有归还任何东西。但是,您不需要从addList()返回任何内容,因为您正在通过指针指针修改指针first。因此,将其设为返回void的函数,并且不要将addList()的返回值分配给first

您希望使用NULL指针终止列表。所以,改变

struct item *first = malloc(sizeof(struct item));

struct item *first = NULL;

它们都修复了内存泄漏并确保列表的结尾是一个NULL指针。

答案 1 :(得分:0)

  

struct item * addList(struct item ** first,int num);

     

first = addList(&amp; first,n);

你应该决定是否让addList()来操纵它的第一个参数(这样增加列表),或者让addList()返回新元素并让main()操作&#34; first&#34;。在前一种情况下,DONT首先分配给主要;在第二种情况下,你必须有addList()来返回一个值(你可以摆脱指针指针)。