我注意到,這個工作正常,但我不會期望它:C:做-而自由鏈表
do {
free(params);
} while ((params = params->next));
通常我會用這樣的事情,但不爲看優雅:
do {
params_t *next = params->next;
free(params);
params = next;
} while (params);
(代碼意味着params
分配)
或者:
while (params) {
params_t *next = params->next;
free(params);
params = next;
}
可能無關,但我使用-std=gnu11
與clang
。
第一段代碼是否有效?
不,這是不確定的行爲,並不能保證工作。 –
你是如何獲得名單的頭?我在處理鏈表時學到的東西是一個包含N個節點的列表具有N-1個鏈接。當你知道的時候顯然是神祕的,當你不知道時通常是致命的。將打印語句添加到所有三個循環的主體中,並對節點和鏈接進行物理計數。 –