Malloc
sush
-
chwepsy -
chwepsy -
Bonjour,
je commence a etudier la fonction malloc et pour moi ca ressemble a du chinoi...Par exemple pour creer une fonction qui retourne un tableau d int, qui contient tout les valeurs int et max, si min superieur a max un pointeur retournera 0 :
d apres ce que j ai compri il faut deja definir la valeur de malloc (#define LEN) mais vu qu il y a dans la fonction int max et min qui sont deja definit je ne vois pas trop quoi mettre apres le LEN ?
J ai essayer de commencer la fonction mais je seche completement.... Merci d'avance pour votre aide.
#define LEN ?
int *ft_range(int min, int max)
{
int min = 0;
int max = n;
char *str;
str = malloc(sizeoff(*str)
if (min > max)
{
str = NULL;
}
}
je commence a etudier la fonction malloc et pour moi ca ressemble a du chinoi...Par exemple pour creer une fonction qui retourne un tableau d int, qui contient tout les valeurs int et max, si min superieur a max un pointeur retournera 0 :
d apres ce que j ai compri il faut deja definir la valeur de malloc (#define LEN) mais vu qu il y a dans la fonction int max et min qui sont deja definit je ne vois pas trop quoi mettre apres le LEN ?
J ai essayer de commencer la fonction mais je seche completement.... Merci d'avance pour votre aide.
#define LEN ?
int *ft_range(int min, int max)
{
int min = 0;
int max = n;
char *str;
str = malloc(sizeoff(*str)
if (min > max)
{
str = NULL;
}
}
12 réponses
Bonjour,
Voici un code commenté qui devrait pouvoir répondre à tes attentes:
Voici un code commenté qui devrait pouvoir répondre à tes attentes:
int *ft_range(int min, int max)
{
int *arr; // Futur tableau d'int
int i;
if (min > max) // si min > max ; retourne 0
return (0);
arr = malloc(((max - min) + 2) * sizeof(int));
/*
** malloc <=> j'alloue (((max - min) + 2)) cases qui ont la taille d'un int
** Pour un tableau qui va de 1 à 3;
** ça fait (3 - 1) + 2 = 4 cases
** (de 0 à 3 + une dernière pour stocker null
*/
for (i = 0; i < ((max - min) + 1); i++) // remplissage du tableau avec les bonnes valeurs
arr[i] = min + i;
arr[i] = 0; // Dernière case du tableau a null pour detecter sa fin
return (arr);
}
int main(int ac, char **av)
{
int *arr;
arr = ft_range(5, 10); // assignation du tableau avec les valeurs min et max ; 5 & 10
if (arr)
while (*arr) // Affichage du tableau case par case
printf("%d\n", *(arr++));
return (0);
}
C est pareil que pour le premier non ? Sauf que lorsque min > max ce sera un pointeur de range qui sera sur NULL, et ensuite pour retourner la taille de la range on mettre ca ? arr = malloc (range) * sizeof(int))
Et pour le premier if quand min>max return 0, vu que c est un pointeur nul qui sera retourne pourquoi ne met on pas de pointeur ?
Et pour le premier if quand min>max return 0, vu que c est un pointeur nul qui sera retourne pourquoi ne met on pas de pointeur ?
Bonjour je te remercie ! c est tres bien explique c est beaucoup plus claire comme ca . Juste un truc pour le min > max retourne 0, ca ne retourne pqs 0 mais nulle, donc je remplace 0 par NULL ? et c est cense renvoyer un pointeur nulle, donc il devrait avoir l etoile (*) du pointeur non ?
Apres j ai quasi le meme exercice, sauf qu lieu de renvoyer un tableau, il alloue et assigne un tableau d int, cela va etre la meme chose non ? Dans cette exercice la fonction aura un 'int' de plus (int **range), et celle ci pointera sur NULL si min > max, ensuite la taille de rang sera retourner, cela donnera ca ?
if (min > max)
range = NULL;
arr = malloc (range) * sizeof(int))
Apres j ai quasi le meme exercice, sauf qu lieu de renvoyer un tableau, il alloue et assigne un tableau d int, cela va etre la meme chose non ? Dans cette exercice la fonction aura un 'int' de plus (int **range), et celle ci pointera sur NULL si min > max, ensuite la taille de rang sera retourner, cela donnera ca ?
if (min > max)
range = NULL;
arr = malloc (range) * sizeof(int))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En fait NULL n'est qu'une macro comme une autre.
C'est le préprocesseur qui la remplacera automatiquement dans ton code par
((void *)0) ou ((char *)0) (ça dépend de ton architecture), donc par 0.
Par réflexe j'utilise 0 à la place de NULL, car ça fait gagner de la place.
A toi de prendre l'habitude que tu veux. Le tout c'est de le comprendre et de savoir expliquer pourquoi tu met 0 à la place de null, et en quoi c'est "équivalent".
Pour ton deuxième exercice, est-ce que le prototype de la fonction serait
Software is like sex, it's better when it's free - Linus Torvald
C'est le préprocesseur qui la remplacera automatiquement dans ton code par
((void *)0) ou ((char *)0) (ça dépend de ton architecture), donc par 0.
Par réflexe j'utilise 0 à la place de NULL, car ça fait gagner de la place.
A toi de prendre l'habitude que tu veux. Le tout c'est de le comprendre et de savoir expliquer pourquoi tu met 0 à la place de null, et en quoi c'est "équivalent".
Pour ton deuxième exercice, est-ce que le prototype de la fonction serait
void ft_range(int **arr, int min, int max)?
Software is like sex, it's better when it's free - Linus Torvald
C est pareil que pour le premier non ? Sauf que lorsque min > max ce sera un pointeur de range qui sera sur NULL, et ensuite pour retourner la taille de la range on mettre ca ? arr = malloc (range) * sizeof(int))--> Pas tout à fait, comme tu me l'as confirmé précédemment, la fonction de renverra rien (void).
Je te laisse réfléchir un peu et poster un code qui marche ou pas, pour que je te dises ce qu'il ne va pas.
Et pour le premier if quand min>max return 0, vu que c est un pointeur nul qui sera retourne pourquoi ne met on pas de pointeur ?
--> Je ne te l'ai pas expliqué deux post avant ? NULL est un pointeur... qui vaut 0.
Desole j avais mal compris que NULL etait un pointeur, j ai fais ca, est ce bon ?
int *ft_range(int min, int max)
{
int *arr; // Futur tableau d'int
int i;
if (min > max)
**range = NULL;
arr = malloc (range) * sizeof (int));
for (i = 0; i < ((max - min) + 1); i++)
arr[i] = min + i;
arr[i] = 0;
}
int main(int ac, char **av)
{
int *arr;
arr = ft_range(5, 10);
if (arr)
while (*arr)
printf("%d\n", *(arr++));
return (0);
}
int *ft_range(int min, int max)
{
int *arr; // Futur tableau d'int
int i;
if (min > max)
**range = NULL;
arr = malloc (range) * sizeof (int));
for (i = 0; i < ((max - min) + 1); i++)
arr[i] = min + i;
arr[i] = 0;
}
int main(int ac, char **av)
{
int *arr;
arr = ft_range(5, 10);
if (arr)
while (*arr)
printf("%d\n", *(arr++));
return (0);
}
Deuxieme, si tu demandes ca c est que ce n est pas bon lol, mais de ce que j ai compris c est presque la meme chose, on va juste changer le pointeur range qui retourne donc null, et renvoyer sa valeur ?
Desole pour le temps de reponse, je fais la piscine de 42, on voit pleins de choses en meme temps je ne sais plus ou donner de la tete
Desole pour le temps de reponse, je fais la piscine de 42, on voit pleins de choses en meme temps je ne sais plus ou donner de la tete