我有一大堆的結構,所有看起來像重新分配動態鏈接結構的表用C
typedef struct {
A[1..100] *next; // this is not an array, just indicating A1 or A2 or A3 and so on
//other stuff that varies from struct to struct
} A[1..100] // A1, A2, and so on
我產生不同的同類型結構的幾個鏈表。在某處一個功能,我的東西分配內存喜歡
A55 *struct_list;
A55 *next_in_list;
struct_list = (A55 *)malloc(sizeof(A55));
(*struct_list).next = NULL;
//some loop
next_in_list = (A55 *)malloc(sizeof(A55));
(*next_in_list).next = struct_list;
struct_list = next_in_list;
在循環結束時,struct_list
是一個指針鏈表的末尾。
我想有一個單獨的函數,可以釋放任何列表,而不管填充它的結構如何。我覺得有以下可能的工作,但我需要的東西,它不會破壞任何規則和可能實現安全:
void freeStruct(*void start){
void ** current, * next;
current = (void **) start;
do{
next = *current;
free(current);
current = (void **) next;
}while(current != NULL)
}
我的問題是NULL是否爲所有的指針所有類型,包括struct
相同的數值。而且,有沒有更好的方法可以做到這一點,而不必爲不同的struct
定義複製相同的功能100次?
Null僅在編譯時爲0,它在運行時依賴於實現(AFAIK)。所有'next'指針都在'struct'的開頭。 – Ivan 2013-03-05 22:25:27
討論NULL的合法值:http://stackoverflow.com/questions/2599207/can-a-conforming-c-implementation-define-null-to-be-something-wacky但根據我的經驗,我從未見過NULL是除0之外的任何值。這包括Windows,Mac,Linux和嵌入式。而且,有很多代碼可以處理像'while(ptr-> next){do_something(ptr); ptr = ptr-> next}'和一個非零的NULL會破壞所有的代碼,所以我認爲任何平臺都不符合通常的做法是使NULL爲0。 – steveha 2013-03-05 22:41:43