1

所以我有这段代码,下面给出了代码片段。

list* init(list* list1)
{
  list1->head = NULL;
  list1->size = 0;
  return list1;
}

list1 是一个链表,init 是从 main 函数调用的。现在上线了list1->head= NULL,在我运行代码后,它突出显示了这一行并说

未指定模块定义文件:使用默认值。

它停止了执行。

我在 Windows 7 上使用 Turbo C。

我该怎么办?我应该发布完整的代码吗..虽然有点大..

4

2 回答 2

0

NULL 在 C 的 <stddef.h> 中定义,在 C++ 中定义了等效的 <cstddef>。

于 2011-09-09T17:52:51.630 回答
0

根据我们在评论中的讨论,它看起来像是多种因素的组合。

首先,Turbo C 编译器似乎不知道 NULL 是什么。由于 NULL 只是 0 的类型定义,因此您可以使用 0 代替。

其次,您似乎没有为列表对象分配内存。在调用函数之前尝试执行以下操作。

list* list1 = malloc(sizeof(list));

但是,如果您要做的是创建和初始化一个新list对象,则最好重写该函数,如下所示:

list* init(){
    list *new_list = malloc(sizeof(list));
    new_list->head = 0; // <-- this sets head to the equivalent of NULL
    new_list->size =0;
    return new_list;
}

如果您想要的是重新初始化现有列表的函数,那么无论如何您都会导致当前代码出现内存泄漏。

于 2011-09-09T18:07:26.110 回答