2011-09-09 150 views
1

所以我有这段代码,下面给出了代码片段。没有指定模块定义文件

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

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

没有指定模块定义文件:using defaults。

它停止执行。

我在Windows 7上使用turbo C.

我该怎么办? 我该发布的完整代码。它是有点儿大虽然..

+1

请问您可以添加assert(list1);在函数的顶部。 – eisbaw

+0

我怀疑我们需要更多代码来弄清楚。也就是说,可能没有为您的编译器定义NULL - 尝试'list1-> head = 0',看看它是否抱怨。 – Chris

+0

@克里斯它改变到'列表 - >头= 0'它说, 常规保护异常 0x213F:0X000D处理器故障 – Kraken

回答

0

根据我们在评论中的讨论,它看起来像是一个综合因素。

首先,看起来Turbo C编译器不知道NULL是什么。由于NULL只是0的typedef,因此可以使用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; 
} 

如果你想要的是一个函数重新初始化一个现有的列表,那么你现在的代码导致内存泄漏。

0

NULL在< STDDEF.H>定义为C,以及等效< cstddef>用于C++。