嗨我试着编写一个程序,它将返回最小值链表并获得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;
}
答案 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()来返回一个值(你可以摆脱指针指针)。