2011-09-09 89 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++。