From a3c44c565cfaea7215064bd0d3004d89552faef2 Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Thu, 21 Nov 2019 15:14:20 +0100 Subject: [PATCH] correction lstnew erreur de malloc --- .Makefile.swn | Bin 16384 -> 16384 bytes srcs/.DS_Store | Bin 0 -> 6148 bytes srcs/bonus/a.out | Bin 8744 -> 8568 bytes srcs/bonus/ft_dl.c | 99 ++++++++++++++++++++++++++++++ srcs/bonus/ft_lstclear.c | 108 +++++++++++++++++++++++++++++++++ srcs/bonus/ft_lstdelone.c | 2 +- srcs/bonus/ft_lstmap.c | 124 ++++++++++++++++++++++++++++++++++++++ srcs/bonus/ft_lstnew.c | 14 ++--- srcs/bonus/lstclear.c | 9 --- srcs/bonus/lstmap.c | 35 ----------- 10 files changed, 337 insertions(+), 54 deletions(-) create mode 100644 srcs/.DS_Store create mode 100644 srcs/bonus/ft_dl.c create mode 100644 srcs/bonus/ft_lstclear.c create mode 100644 srcs/bonus/ft_lstmap.c delete mode 100644 srcs/bonus/lstclear.c delete mode 100644 srcs/bonus/lstmap.c diff --git a/.Makefile.swn b/.Makefile.swn index f1d6f7007b23b9069192ebf97485c4b9d92b0644..94cb7a06eadde18e603bc6df061990dd3c981ba2 100644 GIT binary patch delta 23 ecmZo@U~Fh$oFKu(wSJ3Z5S{S@f{mqRuHX%V=n3`$B7%*qplH37=kjR2`83O7r-kwcCNG)HOUNsB zc0@$ix5G+gAtE!lp*(CDn(dnpY?KiN!g0p+-dx(#xjhbY-vx|2mA#y$m0OQ*J2Wal z1*iZOpaN9j(+XsToy|XeFwdg`RN&_ouHg$K#o*^3iK5i$8urye+z%p z|My8;Q2{FOR|@E4(`?pwQr6bNi80h5~3oFM#>1-`Ao3mSqH-~a#s literal 0 HcmV?d00001 diff --git a/srcs/bonus/a.out b/srcs/bonus/a.out index ce53b7c6c614d43fb43e728188fb480108e4896a..dfd070761e47b14b0d9cb839dab82cbe23998e16 100755 GIT binary patch delta 929 zcmZ8gO=uHA6n?we*44DxO@vY#6K0E%3My?CtWnc6bajzhtb!Cl(i*o!O|m83Y867j zq7X_kWiCDTDD_~Vm!9gOYUrV&mx3brizMhFc#uMc_{K~j^}#o9zVE$n|K9AA{>@1K zji=BIAOOHEwqO*R=e~qIZAwjTs)^91&~72*>EQAKE_W#Ofe>;Ja5=%{0s2*A#?GQpm z%#)=qbwj2j&Um({|3L*_>039HmB}q*_KY9DP60|kP&H;VTRHt_Da!Uay<*HTfU?qw zeePP{YR%ox-7To*^b%fRk(p*PXy{c|PN1Py`i7;)SnB$n(?8|piZT6yTw5KZ&z-G0 zzfZ}S-UQ_#P792pzKIFSK}M!C71Y@);FFY$BC9}|eW}`$T__njfnI6yXRCnvzIT}VE>{CNu57Pe9U%z(k3a(COhoRMi&*oiyg+}cyk7?LN}D7yL?B`OiEEjgM$y44+yj;C*?>@j2*^c*?Z*~d;1h)FXU8@~sq6BBmIybEU? zQ1F5S^80aF@Ua#gt#>3Z&~@U?F5tW4v_L~BY?%D_ILx`q>)pt)%v%2i8$~^j{Kwe| jZ9p_4Fv8oMKs1_+N6jfSHfftt`b=}uui8E;wg>(KQ9jW< literal 8744 zcmeHM-)~b@9RJpWlnHC61OY`Z#1SN61A`GUlg@DEqM!&YF`DJjA9t>??M8bWwui=Q znR02C>_3nP5`EwS6JvP7$%r$?$Rq@LAf^vWZp}<)qOlUf{CrPOyW4L1YE14oIX^z% z@ArJ~_k7N2?(I3(?*4jz1(DBBRCs`hf+&;Ah{i}mk7zxLfg;3_-UIrZ`q9@|+bq6j zxFq5@x8Nwmas7?s%`S3$s98q}BR5*E3VR4)nIjhWYSJ3-#6y@2Odn!GEQ~Ro1zARg z1;FvLRxX-ts9NJW?X`FhD~~#^4+yAu4=P11o)|Qf!)6A$)_C_+ye{R>n0ar=qWof6 zE0ajStsGk8ZO4M~eBW1g#%^hf4TBK5^r=KTE)wa1A&HyUr5Xs2D z#S39P=eJIdCSvR!U*C7i?D`!XI{4}<`u>CUJ*>6N6PRV2ni$8CJV-6k7W~e3a$h3~ zpb4O@=Kx3=@HVst+7YxIhV3)J*vfQnGtn8e+&_Zi7Je3&rv2`AK)-JN(=|C~V_7`|kdPY4{d$K|aSuvzD3ada(<6C8BVGY(?St zlUl8PN@3>96ORFp0gnNX0gr+Iih(}E{@JkeRm0BB8Frszl={%`yM>nVj4`d3=OIQ( zFB`>4pJAhYUUz~;e&a$rW0Ve;&#noei$RCWXVwHN*J=Z*{ZkV%esNa2#4kbnOFRl; zuQ`w4{fkhJQLIvMjNi3*P?brj@W-=J%+Ep3V-VLdrrAOj9n~fNIg`EdsBE3xFoH1R? ztA8rEDNK#^DdnqQtsr-D!A<+AW-rc$r}caCVdFi&pUVVq-JV(t$F zpu54kNL^QY7ui5B6QSVco$&Y!9v8_uiAIiNpVGeIo;JUYM2fpTV>{;wmt*%`6jc=@!nOl}*j@YPZ(^p{8-F_Z&(hfM2ob{XWWI9?@|^E{Qr25h z6CE1gxE!6{WAmMV08R|DvT_Hk4D#n_;=aPK;L5sFfbtRZV?#|!a@710{9w=>qJ z4CxWeWoMmxSF;GfXF9sPwyA0 zL1B)Vv7BY%4m`qPwhmZ=wx=SAG^P2Zg8V5n6&oI<-elIIm*Qs9v`k9)sk|1pw0Vj| zBpw&hNbDVo!#b2UDeI@nM{$->SkKi4ROh(5xDkU+O!^8wZGsOvApC@&j}JC$2OWqB zj0$I<+-z33fD<0Ze2mEUi#Ri3yiegtoTo5;Sz$h3Vce%M-(NC*3k5BAr9@D>aiRsE zY{7hA%g3ZEQE+?85_an}+=MUYRDe@O9CtxvgEEB`aSBOR;i#C$B4Raa%UWO1`cf|1 I2DPOA2Bb-OL;wH) diff --git a/srcs/bonus/ft_dl.c b/srcs/bonus/ft_dl.c new file mode 100644 index 0000000..ccdd0ef --- /dev/null +++ b/srcs/bonus/ft_dl.c @@ -0,0 +1,99 @@ + +#include + +typedef struct s_list +{ + void *content; + struct s_list *next; +} t_list; + +void *ft_memcpy(void *dst, const void *src, size_t n) +{ + size_t i; + char *ptr; + char *ptr2; + + ptr = (char *)dst; + ptr2 = (char *)src; + i = -1; + while (++i < n) + ptr[i] = ptr2[i]; + return (dst); +} + +t_list *ft_lstnew(void *content) +{ + t_list *lst; + + if (!(lst = (t_list *)malloc(sizeof(*lst)))) + return (NULL); + if (!content) + lst->content = NULL; + else + { + if (!(lst->content = malloc(sizeof(content)))) + return (NULL); + ft_memcpy(lst->content, content, sizeof(content)); + } + lst->next = NULL; + return (lst); +} + +void ft_lstadd_back(t_list **alst, t_list *new) +{ + t_list *tmp; + + if (alst) + { + tmp = *alst; + if (!tmp) + *alst = new; + else + { + while (tmp->next) + tmp = tmp->next; + tmp->next = new; + } + new->next = NULL; + } +} + + + + +//############################################################################## + +void ft_delete(void *element) +{ + *(char*)element = '\0'; +} + +void ft_lstdelone(t_list *lst, void (*del)(void *)); + +int main(void) +{ + t_list *toto; + void (ft_delete)(void*); + + toto = ft_lstnew("a"); + toto->next = ft_lstnew("b"); + toto->next->next = ft_lstnew("c"); + printf("toto->data :%c\n",*(char*)(toto->content)); + printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); + printf("toto->nxt->nxt->data:%c\n",*(char*)(toto->next->next->content)); + printf("toto->nxt->nxt->nxt :%s\n",(char*)(toto->next->next->next)); + ft_lstdelone(toto->next, ft_delete); + printf("----------------------\n"); + printf("toto->data :%c\n",*(char*)(toto->content)); + printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); + printf("toto->nxt->nxt->data:%c\n",*(char*)(toto->next->next->content)); + printf("toto->nxt->nxt->nxt :%s\n",(char*)(toto->next->next->next)); + return (0); +} + +void ft_lstdelone(t_list *lst, void (*del)(void *)) +{ + del(lst->content); + free(lst); + lst = NULL; +} diff --git a/srcs/bonus/ft_lstclear.c b/srcs/bonus/ft_lstclear.c new file mode 100644 index 0000000..f72b4d6 --- /dev/null +++ b/srcs/bonus/ft_lstclear.c @@ -0,0 +1,108 @@ +/* +** delete and free an element of the list and all the followings +*/ + +/* +** #include +** +** typedef struct s_list +** { +** void *content; +** struct s_list *next; +** } t_list; +** +** void *ft_memcpy(void *dst, const void *src, size_t n) +** { +** size_t i; +** char *ptr; +** char *ptr2; +** +** ptr = (char *)dst; +** ptr2 = (char *)src; +** i = -1; +** while (++i < n) +** ptr[i] = ptr2[i]; +** return (dst); +** } +** +** t_list *ft_lstnew(void *content) +** { +** t_list *lst; +** +** if (!(lst = (t_list *)malloc(sizeof(*lst)))) +** return (NULL); +** if (!content) +** lst->content = NULL; +** else +** { +** if (!(lst->content = malloc(sizeof(content)))) +** return (NULL); +** ft_memcpy(lst->content, content, sizeof(content)); +** } +** lst->next = NULL; +** return (lst); +** } +** +** void ft_lstadd_back(t_list **alst, t_list *new) +** { +** t_list *tmp; +** +** if (alst) +** { +** tmp = *alst; +** if (!tmp) +** *alst = new; +** else +** { +** while (tmp->next) +** tmp = tmp->next; +** tmp->next = new; +** } +** new->next = NULL; +** } +** } +** +** void ft_delete(void *element) +** { +** *(char*)element = '\0'; +** } +** +** void ft_lstdelone(t_list *lst, void (*del)(void *)) +** { +** del(lst->content); +** free(lst); +** lst = NULL; +** } +** +** void ft_lstclear(t_list **lst, void (*del)(void *)); +** +** int main(void) +** { +** t_list *toto; +** void (ft_delete)(void*); +** +** toto = ft_lstnew("a"); +** toto->next = ft_lstnew("b"); +** toto->next->next = ft_lstnew("c"); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->data:%c\n",*(char*)(toto->next->next->content)); +** printf("toto->nxt->nxt->nxt :%s\n",(char*)(toto->next->next->next)); +** ft_lstclear(&(toto->next), ft_delete); +** printf("----------------------\n"); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt :%s\n",(char*)(toto->next->next)); +** return (0); +** } +*/ + +#include "libft.h" + +void ft_lstclear(t_list **lst, void (*del)(void *)) +{ + if ((*lst)->next) + ft_lstclear(&(*lst)->next, del); + ft_lstdelone(*lst, del); +} + diff --git a/srcs/bonus/ft_lstdelone.c b/srcs/bonus/ft_lstdelone.c index 838806e..8cca4a8 100644 --- a/srcs/bonus/ft_lstdelone.c +++ b/srcs/bonus/ft_lstdelone.c @@ -92,7 +92,7 @@ ** } */ -#include "libft.h" +//#include "libft.h" void ft_lstdelone(t_list *lst, void (*del)(void *)) { diff --git a/srcs/bonus/ft_lstmap.c b/srcs/bonus/ft_lstmap.c new file mode 100644 index 0000000..b3642c6 --- /dev/null +++ b/srcs/bonus/ft_lstmap.c @@ -0,0 +1,124 @@ +/* +** iterate trhough linked list and apply to each element a function f +** if necessary the function del is used to delete an element +*/ + +/* +** #include +** +** typedef struct s_list +** { +** void *content; +** struct s_list *next; +** } t_list; +** +** void *ft_memcpy(void *dst, const void *src, size_t n) +** { +** size_t i; +** char *ptr; +** char *ptr2; +** +** ptr = (char *)dst; +** ptr2 = (char *)src; +** i = -1; +** while (++i < n) +** ptr[i] = ptr2[i]; +** return (dst); +** } +** +** t_list *ft_lstnew(void *content) +** { +** t_list *lst; +** +** if (!(lst = (t_list *)malloc(sizeof(*lst)))) +** return (NULL); +** if (!content) +** lst->content = NULL; +** else +** { +** if (!(lst->content = malloc(sizeof(content)))) +** return (NULL); +** ft_memcpy(lst->content, content, sizeof(content)); +** } +** lst->next = NULL; +** return (lst); +** } +** +** void ft_lstadd_back(t_list **alst, t_list *new) +** { +** t_list *tmp; +** +** if (alst) +** { +** tmp = *alst; +** if (!tmp) +** *alst = new; +** else +** { +** while (tmp->next) +** tmp = tmp->next; +** tmp->next = new; +** } +** new->next = NULL; +** } +** } +** +** void *to_uppercase(void *element) +** { +** *(char*)(((t_list*)element)->content) -= 32; +** return (element); +** } +** +** void ft_delete(void *element) +** { +** *(char*)element = '\0'; +** } +** +** t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)); +** +** int main(void) +** { +** t_list *toto; +** void *(to_uppercase)(void *); +** void (ft_delete)(void*); +** +** toto = ft_lstnew("a"); +** toto->next = ft_lstnew("b"); +** toto->next->next = ft_lstnew("c"); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->data:%c\n",*(char*)(toto->next->next->content)); +** printf("toto->nxt->nxt->nxt :%s\n",(char*)(toto->next->next->next)); +** ft_lstmap(toto->next, to_uppercase, ft_delete); +** printf("----------------------\n"); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->data:%c\n",*(char*)(toto->next->next->content)); +** printf("toto->nxt->nxt->nxt :%s\n",(char*)(toto->next->next->next)); +** return (0); +** } +*/ + +#include "libft.h" + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) +{ + t_list *new; + t_list *tmp; + + if (!lst) + return (NULL); + tmp = (t_list*)f(lst); + new = tmp; + while (lst->next) + { + lst = lst->next; + if (!(tmp->next = (t_list*)f(lst))) + { + free(tmp->next); + return (NULL); + } + tmp = tmp->next; + } + return (new); +} diff --git a/srcs/bonus/ft_lstnew.c b/srcs/bonus/ft_lstnew.c index 6c0532e..061f428 100644 --- a/srcs/bonus/ft_lstnew.c +++ b/srcs/bonus/ft_lstnew.c @@ -33,13 +33,13 @@ ** t_list *toto; ** ** tresor = 'd'; -** printf("tresor : %c\n",tresor); +** printf("tresor : %c\n",tresor); ** toto = ft_lstnew(&tresor); ** //toto->content was alocated as void* so it need cast -** printf("toto->content : %c\n",*(char*)(toto->content)); +** printf("toto->content : %c\n",*(char*)(toto->content)); ** tresor = 'D'; -** printf("transform tresor : %c\n",tresor); -** printf("but not toto->content: %c\n",*(char*)(toto->content)); +** printf("transform tresor : %c\n",tresor); +** printf("and also toto->content: %c\n",*(char*)(toto->content)); ** return (0); ** } */ @@ -55,11 +55,7 @@ t_list *ft_lstnew(void *content) if (!content) lst->content = NULL; else - { - if (!(lst->content = malloc(sizeof(content)))) - return (NULL); - ft_memcpy(lst->content, content, sizeof(content)); - } + lst->content = content; lst->next = NULL; return (lst); } diff --git a/srcs/bonus/lstclear.c b/srcs/bonus/lstclear.c deleted file mode 100644 index 11161dd..0000000 --- a/srcs/bonus/lstclear.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "libft.h" - -void ft_lstdel(t_list **alst, void (*del)(void *, size_t)) -{ - if ((*alst)->next) - ft_lstdel(&(*alst)->next, del); - ft_lstdelone(alst, del); -} - diff --git a/srcs/bonus/lstmap.c b/srcs/bonus/lstmap.c deleted file mode 100644 index 6b9a2c8..0000000 --- a/srcs/bonus/lstmap.c +++ /dev/null @@ -1,35 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_lstmap.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: hulamy +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2018/11/14 21:11:20 by hulamy #+# #+# */ -/* Updated: 2018/11/16 14:01:23 by hulamy ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "libft.h" - -t_list *ft_lstmap(t_list *lst, t_list *(*f)(t_list *elem)) -{ - t_list *new; - t_list *tmp; - - if (!lst) - return (NULL); - tmp = f(lst); - new = tmp; - while (lst->next) - { - lst = lst->next; - if (!(tmp->next = f(lst))) - { - free(tmp->next); - return (NULL); - } - tmp = tmp->next; - } - return (new); -}