ft_lstdelone - chanhl22/libft GitHub Wiki

  1 /* ************************************************************************** */
  2 /*                                                                            */
  3 /*                                                        :::      ::::::::   */
  4 /*   ft_lstdelone.c                                     :+:      :+:    :+:   */
  5 /*                                                    +:+ +:+         +:+     */
  6 /*   By: chanhlee <[email protected].>       +#+  +:+       +#+        */
  7 /*                                                +#+#+#+#+#+   +#+           */
  8 /*   Created: 2021/01/29 15:53:49 by chanhlee          #+#    #+#             */
  9 /*   Updated: 2021/01/30 00:09:11 by chanhlee         ###   ########.fr       */
 10 /*                                                                            */
 11 /* ************************************************************************** */
 12 
 13 #include "libft.h"
 14 
 15 void    ft_lstdelone(t_list *lst, void (*del)(void *))
 16 {
 17     if (!del)    // lst ๋‚˜ del ์ด ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ, ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•จ.
 18         return ;
 19     if (lst)
 20     {
 21         del(lst->content); // del = ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๋•Œ content์— ์ ์šฉํ•  ํ•จ์ˆ˜, 
 22         free(lst); // ๊ทธ๋ฆฌ๊ณ  ์š”์†Œ๋ฅผ free์‹œํ‚จ๋‹ค (ํ•จ์ˆ˜๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์“ฐ์ด๋Š”๊ฑฐ๋‹ˆ๊นŒ)
 23         lst = NULL;  // free ํ›„์—๋„ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ์ด์ „ ๊ฐ’์ด ๋‚จ์•„์žˆ๊ธฐ ๋•Œ๋ฌธ์— 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Œ                                                                     
 24     }
 25 }
  1. del = ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๋•Œ content์— ์ ์šฉํ•  ํ•จ์ˆ˜
    content๊ฐ€ ๋™์ ํ• ๋‹น๋œ ํฌ์ธํ„ฐ์ธ ๊ฒฝ์šฐ ๋ณดํ†ต free๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค
    ft_lstdelone(lst, free); // del๋กœ free๋ฅผ ์‚ฌ์šฉ
    ft_lstdelone(lst, myfunction); // del๋กœ ๋‚ด๊ฐ€๋งŒ๋“  myfunction ์‚ฌ์šฉ
    ๊ตฌ์กฐ์ฒด ์•ˆ์— void *content์˜ ์ž๋ฃŒํ˜•์ด ์–ด๋–ค๊ฒŒ ๋“ค์–ด ์˜ฌ์ง€ ๋ชจ๋ฆ„, int๊ฐ€ ๋ ์ˆ˜๋„ ์žˆ๊ณ  charํ˜•์ด ๋  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ content ๋กœ ๋“ค์–ด๊ฐˆ์ˆ˜๋„ ์žˆ๋‹ค.
  2. ๋งŒ์•ฝ์— del๋งค๊ฐœ๋ณ€์ˆ˜์— free๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค๋ฉด free(lst->content) == del(lst->content)
  3. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ delํ•จ์ˆ˜ํฌ์ธํ„ฐ๋กœ ๋…ธ๋“œ์˜ ์š”์†Œ๋ฅผ ์ ์šฉํ•œ๋‹ค.
  4. ๊ทธ๋ฆฌ๊ณ  ์š”์†Œ๋ฅผ free์‹œํ‚จ๋‹ค (ํ•จ์ˆ˜๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์“ฐ์ด๋Š”๊ฑฐ๋‹ˆ๊นŒ)