Nouvelle notion très importante du langage C, l'allocation de mémoire de manière dynamique. Ce procédé permet par exemple de réserver un espace dont une ne sait pas à l'avance quelle taille il fera.
Pouvez vous m'expliquer pourquoi chaque fois on le met cet multiplication en haut de *liste_joueurs et aussi sizeof(int ) * nombreJoueurs, nombreJoueurs * sizeof(int ) . Ce quoi l'utilite de cet etoile ..
Je crois que j'ai plus appris en language c en quelques mois que d'anglais pendant 2 ans ! Tu expliques super bien en détaillant tout ce que tu écris et a quoi ça sert du coup je comprends très bien le language surtout que je suis assez jeune, au collège, et que d'habitude pour mon age il est difficile d'assimiler, eh bien la, j'apprend super vite grace a toi. Merci infiniment pour tout ce que tu fais !
Premierement je te remercie bcp mille fois et tu merite plus que ca et la formation ca ma vraiment aide bcp merci encore je ne jamais vu dans youtube une formation C comme toi actuellement j ai entain de terminer bientot .
De rien =) +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8 |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
Ahah, je me souviens d'anciennes vidéos faites pendant la nuit ;) ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ 💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA ◾ Site web : jasonchampagne.fr ◾ Discord : discord.me/jasonchampagne ◾ Twitch : www.twitch.tv/jachampagne ◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne ◾ Twitter : twitter.com/jachampagne8 ◾ Facebook : facebook.com/jachampagne8 ◾ Instagram : instagram.com/jachampagne8 ◾ Snapchat : www.snapchat.com/add/jachampagne8
Super vidéo et explications limpides comme toujours. On s'était pris un zéro avec mes camarades de piscine lors d'un rush sur un towerdoku : on avait oublié de libérer la mémoire à la fin du programme. Deux jours de travail mis à la poubelle juste à cause d'un free manquant. 😢
Je rejoins l'avis général, super explication ! Ça faisait plusieurs séances de cours que j'étais largué 😂... (L'avenir de l'enseignement est sur yt.) Merci beaucoup ! ☺
De rien, merci à toi 😊 +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8 |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
Si tu souhaites allouer de la mémoire consécutive pour plusieurs variables de même type (typiquement un tableau dynamique), c'est mieux d'utiliser calloc que malloc. Parce que p = malloc(n * sizeof(Type)) peut engendrer un overflow sur la multiplication et allouer en fait bien moins que n cases, ce qui peut ensuite conduire à un débordement mémoire sur p[i]. Sinon bonne vidéo !
Bonsoir, j'imagine que tu fais référence au fait qu'avec malloc(), comme la mémoire n'est pas initialisé, si on passe une taille qui dépasse la borne max. d'un entier par exemple, on aura un débordement, là où calloc() le bloquera ? +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8 |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
De rien, c'est un concept très important en plus :) +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8/ |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
Tant mieux, ça montre que tu aimes ce que tu fais et que ça te motive à apprendre :) ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ MERCI DE TON SOUTIEN ! 🔻 ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙 ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA ◾ Site web : jasonchampagne.fr ◾ Discord : discord.me/jasonchampagne ◾ Twitch : www.twitch.tv/jachampagne ◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne ◾ Twitter : twitter.com/jachampagne8 ◾ Facebook : facebook.com/jachampagne8 ◾ Instagram : instagram.com/jachampagne8 ◾ Snapchat : www.snapchat.com/add/jachampagne8 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Merci à toi ! ✌ +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8 |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
Bon courage sur la suite Amine =) +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8 |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
Bonjour, j'ai une question ! J'ai un tableau de chaine de caractère dynamique , et je dois transférer dans une chaine dynamique chaque mot du tableau en concatenant à chaque fois. Ca veut dire transformer le tableau de chaine de caractère dynamique en une phrase concaténée et contenue dans ma chaine de caractère dynamique. Jusqu'ici je parviens à réaliser le programme, cependant j'aimerai, à chaque fois que je transfère un mot, le supprimer du tableau après. J'ai pensé à utilisé la fonction realloc( ) mais je ne parviens à supprimer malgré tout. J'ai besoin de votre aide :) Merci pour la vidéo !
Bonjour, pour supprimer, tu peux remplacer chacun des caractères par un '\0', tout simplement. Mais attention, si tu as alloué dynamiquement un espace mémoire, ce dernier devra dans tous les cas être libéré une fois que tu n'en as plus besoin.
Jason Merci pour tout Les efforts que tu fais, j'ai une question ton compilateur ta pas forcer a cast le retour de ta Fonction malloc par contre moi Oui. Pourquoi stp?
Maintenant, il n'est plus nécessaire de caster le retour de malloc(), sauf si tu as un compilateur datant d'il y a 20 ans :D. Donc plus besoin de faire (int*) malloc(sizeof(int)) par exemple, mais juste malloc(sizeof(int))
Bonjour, je n'ai pas compris pourquoi realloc prend liste_joueurs en paramètre alors que liste_joueurs est déjà à gauche du signe =, pouvez-vous m'éclairer svp ? merci pour vos vidéos
Bonjour, si tu ne comprends pas l'opérateur d'affectation, il va falloir revenir sur les premières vidéos du cours. Par exemple, quand j'ai cette expression -> result = 156 + 8; On a l'opération 156 + 8 qui est effectuée, puis la somme est affectée à la variable "result".
Si on désire utiliser un tableau qu'on a alloué dynamiquement durant toute la période d'un jeu programmé. Faut il à chaque fois ré-allouer la mémoire et refaire un free en boucle ? Merci
Non, tu vas allouer ton tableau une seule fois, avec la place que tu as besoin, t'en servir au cours de l'exécution du programme (éventuellement ré-allouer un espace plus grand/petit si nécessaire), et libérer le tout à la fin (ou au mieux, quand les ressources ne sont plus utilisées, pour optimiser les performances) +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8/ |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
bonjour, je ne comprends pas pourquoi est ce qu'il a fallut à 12:00 déclarer liste_joueurs en pointeur ? En plus, plus tard dans le programme il devient un tableau qui est lui-même un pointeur, donc je ne comprends pas l'utilité de le déclaré en pointeur ? A part ca, j'ai essayé dans ce programme de prendre le 'printf ("[%d]",listeJoueur[i]);' qui se trouve dans le deuxième for et de l’insérer dans le premier ce qui m'a écrit dans le programme chaque case dans une ligne au lieu que ce soit toutes les cases sur une même ligne comme dans ton programme en mettant un deuxième for et je ne comprend pas pourquoi il faut mettre un nouveau for pour que ça marche? merci encore pour toutes tes réponses et tes vidéos de qualité!
La liste des joueurs est déclarée comme pointeur car on va fait une allocation dynamique par la suite (ce n'est pas un tableau à taille fixe spécifiée à la déclaration de ce tableau). Ensuite, le deuxième n'est en rien obligatoire comme tu l'as vu, puisqu'ils font le même parcours (du premier élément du tableau au dernier, donc tu pouvais sans soucis tout mettre dans un seul et gérer ton affichage comme tu le souhaites 🙂 +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8 |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
Quelle erreur te donne le compilateur ? +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8 |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
Bonjour à 7 : 50, vous dites que après avoir allouer dynamiquement une zone mémoire pour le pointeur, on va créer un tableau de x joueurs, a quel moment la création du tableau s'est faite? De plus je ne vois pas en quoi, dans cet exemple allouer une zone de mémoire pour le pointeur liste_joueurs est utile, en exécutant le programme sans malloc le résultat est strictement le même.
Bonjour, l'allocation dynamique est effectivement utile quand on ne sait pas à l'avance quelle taille on doit allouer. Si on le sait, il suffit de créer le tableau avec une taille fixe directement inscrite dans le code (ex : tableau[4]). Mais si la taille du tableau doit être générée/choisie à l'exécution du programme, il faudra passer par une allocation dynamique. +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8 |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
Bonsoir, je débute en C. Je code en java, et je ne connais pas très bien les pointeurs et les allocations dynamiques, si je créé un tableau en passant par : int *tab; int taille; scanf("%d",&taille); tab = malloc(sizeof(int) * taille); comment jpeux créer une matrice int[][] dans ce cas?
Bonjour, si ce n'est pas fait, je te recommande de voir les autres vidéos du cours en C (notamment et justement concernant les pointeurs, les tableaux, les chaînes de caractères, etc.) Donc pour allouer un tableau à deux dimensions, il faudra parcourir chaque case de la dimension 1, et allouer la taille nécessaire pour la dimension 2.
Exellente explication !!! une question : dans certain code on ecrit par exemple : tab= (int*) malloc (5*sizeof(int)) à quoi ca sert cette (int *) pourquoi on l'écrit ??
C'est de l'ancien code, à l'époque il fallait obligatoirement caster le retour de la fonction malloc(), ce qui n'est plus le cas (et plus à faire) depuis un bon bout de temps 😉 ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ 💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA ◾ Site web : jasonchampagne.fr ◾ Discord : discord.me/jasonchampagne ◾ Twitch : www.twitch.tv/jachampagne ◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne ◾ Twitter : twitter.com/jachampagne8 ◾ Facebook : facebook.com/jachampagne8 ◾ Instagram : instagram.com/jachampagne8 ◾ Snapchat : www.snapchat.com/add/jachampagne8
bonjour j'ai une petite question concernant la liste de joueur qu'on a creé sous forme de pointeur : est ce qu'on ne peut pas declarer la liste de joueur sous forme de tableau sans l'initialiser comme ca int listejoueurs[ ];
Tu peux tester dans ton code et tu verras ce que ça donne 😉 +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8 |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
Ce que je remarque j'utilise Dev-C++ et j arrivai pas a execute ton programme mais desq j ai effacer la partie ''''''' if (liste_joueurs == NULL) ; exit(1);''''''''''''' j ai pu excuter . Et le problem que tu disais il y aura des bug j'ai essayer mm si tu rentre pas qlk choses et que c'est vide le programme va etre en mode console rien ne marche jusqa que tu rentre qlk choses dc ''''''''il n yaura pas des bug''''''''' . Merci
Pouvez vous m'expliquer pourquoi chaque fois on le met cet multiplication en haut de *liste_joueurs et aussi sizeof(int ) * nombreJoueurs, nombreJoueurs * sizeof(int ) . Ce quoi l'utilite de cet etoile ...
Il ne s'agit pas d'une multiplication mais de la notation d'un pointeur. N'hésite pas à revoir la vidéo sur les pointeurs pour en comprendre tout son fonctionnement :)
Alors dans le malloc(), l'étoile est bien pour une multiplication, puisqu'on demande d'allouer en mémoire la taille d'un entier (int) fois le nombre de joueurs qu'il y a. En revanche, la liste de joueurs, comme on ne sait pas d'avance quelle taille elle fera est un pointeur, que l'on va ensuite allouer pour former un tableau de X éléments, où X est le nombre de joueurs choisis par l'utilisateur.
Bonsoir monsieur. En voulant compiler mon programme, il signale toujours une erreur au niveau du malloc alors qu'il en a pas. Merci d'avance pour votre aide
Svp comme comment écrit un programme d'allocation dynamique des tableau en c qui demande un nom et en suite les notes. lorsque j'écris printf("entre le nom de l'élève "); Scanf("%c",&nom"); j'ai compilé et ça demande bien le non mais une fois le nom saisir le programme ne continue plus sur le tableau ça s'arrête
Pas si tu lis dans autre chose qu'un fichier. Mais quand tu cherches à ouvrir en lecture seule, il faut évidemment que ce dernier existe déjà (cela n'aurait aucun sens d'ouvrir en lecture un fichier qui n'existe pas)
Bonjour, pour utiliser la fonction exit(), il faut penser à inclure l'en-tête "stdlib" en début de fichier, en plus de "stdio". ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ MERCI DE TON SOUTIEN ! 🔻 ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙 ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA ◾ Site web : jasonchampagne.fr ◾ Discord : discord.me/jasonchampagne ◾ Twitch : www.twitch.tv/jachampagne ◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne ◾ Twitter : twitter.com/jachampagne8 ◾ Facebook : facebook.com/jachampagne8 ◾ Instagram : instagram.com/jachampagne8 ◾ Snapchat : www.snapchat.com/add/jachampagne8 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
J’ai lu ce cours mais j’aimerais savoir comment allouer une mémoire en c pour y mettre des mots comme un tableau de mots ou nom dans un tableau avec malloc j’ai essayé avec un int mais je n’arrive pas avec un char ???
Bonjour, quand ton terminal est ouvert, en haut à gauche de la fenêtre tu fais un clic-droit sur l'icône > Propriétés 👍 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ MERCI DE TON SOUTIEN ! 🔻 ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙 ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA ◾ Site web : jasonchampagne.fr ◾ Discord : discord.me/jasonchampagne ◾ Twitch : www.twitch.tv/jachampagne ◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne ◾ Twitter : twitter.com/jachampagne8 ◾ Facebook : facebook.com/jachampagne8 ◾ Instagram : instagram.com/jachampagne8 ◾ Snapchat : www.snapchat.com/add/jachampagne8 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
La playlist des exercices en C est ici : ua-cam.com/play/PLrSOXFDHBtfF6lXQpJ4hBha76DsQufiEQ.html +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8 |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
bonjour, je souhaite créer un tableau dont je ne connais pas la taille sauf que c'est un tableau composé de type comment faire dans ce cas la par exemple j'ai: type defstruct{ int mois; int jour ; char prenom[20] int annee; } date tab [N] sauf que ne connais pas N ça dépendre du nombre de date que mon utilisateur voudra rentrer ...
Bonjour, comme pour n'importe quel type de donnée, tu peux simplement déclarer un date *tab - ensuite tu demanderas la taille à l'utilisateur et tu pourras ensuite allouer le nombre de dates nécessaires. ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ MERCI DE TON SOUTIEN ! 🔻 ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙 ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA ◾ Site web : jasonchampagne.fr ◾ Discord : discord.me/jasonchampagne ◾ Twitch : www.twitch.tv/jachampagne ◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne ◾ Twitter : twitter.com/jachampagne8 ◾ Facebook : facebook.com/jachampagne8 ◾ Instagram : instagram.com/jachampagne8 ◾ Snapchat : www.snapchat.com/add/jachampagne8 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Bon courage avec ce que tu apprends en C, et n'hésite pas si tu as besoin 😉 ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ 💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA ◾ Site web : jasonchampagne.fr ◾ Discord : discord.me/jasonchampagne ◾ Twitch : www.twitch.tv/jachampagne ◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne ◾ Twitter : twitter.com/jachampagne8 ◾ Facebook : facebook.com/jachampagne8 ◾ Instagram : instagram.com/jachampagne8 ◾ Snapchat : www.snapchat.com/add/jachampagne8
J'ai un problème: depuis aujourd'hui, dès que je compile un programme, windows defender le reconnait en tant que menace :/ Comment faire pour y remédier ? Merci d'avance
Il faudrait passer en liste blanche/d'exclusion ton répertoire de travail : support.microsoft.com/fr-fr/help/4028485/windows-10-add-an-exclusion-to-windows-security ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ MERCI DE TON SOUTIEN ! 🔻 ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙 ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA ◾ Site web : jasonchampagne.fr ◾ Discord : discord.me/jasonchampagne ◾ Twitch : www.twitch.tv/jachampagne ◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne ◾ Twitter : twitter.com/jachampagne8 ◾ Facebook : facebook.com/jachampagne8 ◾ Instagram : instagram.com/jachampagne8 ◾ Snapchat : www.snapchat.com/add/jachampagne8 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Oui, tout dépend de comment est analysé le fichier par ton antivirus ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ MERCI DE TON SOUTIEN ! 🔻 ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙 ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA ◾ Site web : jasonchampagne.fr ◾ Discord : discord.me/jasonchampagne ◾ Twitch : www.twitch.tv/jachampagne ◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne ◾ Twitter : twitter.com/jachampagne8 ◾ Facebook : facebook.com/jachampagne8 ◾ Instagram : instagram.com/jachampagne8 ◾ Snapchat : www.snapchat.com/add/jachampagne8 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Salut tes vidéos sont super bien, je comprend bien mieux grâce à toi, merci beaucoup. Je voulais savoir si tu connaissais un bon site internet avec exercice corrigé de niveau plutôt débutant ou même tout niveau ça me permettrai de progresser?
Salut, une recherche sur n'importe quel moteur du style "exercices langage C corrigés" fait toujours l'affaire. Sinon, il y a cette playlist : github.com/jasonchampagne/FormationVideo/blob/master/Playlists/c-exercices.md
#include #include /* run this program using the console pauser or add your own getch, system("pause") or input loop */ /* sizeof() : retourner la taille en octets d'une donnee malloc() : allouer dynamiquement une zone memoire */ int main(void) { int nombreJoueurs=0 ; int * liste_joueurs = NULL ; int i ; printf("Combien des joueurs ?") ; scanf("%d" ,&nombreJoueurs); liste_joueurs = malloc(sizeof(int ) * nombreJoueurs) ; if (liste_joueurs == NULL) ; exit(1); for (i = 0 ; i< nombreJoueurs; i++){ printf("Joueurs %d -> numero %d ", i+1 , i*3); liste_joueurs[i] = i * 3 ; } for (i = 0 ; i< nombreJoueurs ; i++){ printf("[%d] ",liste_joueurs[i]); } free(liste_joueurs) ; return 0; }
Toutes les bits seront à 0. +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8 |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
il ya un truc de l'allocation dynamique que je ne pige pas. Par exemple, un utilisateur doit rentrer une chaine de caractère. Donc on ne connait pas la taille au préalable. Donc comment on alloue l'espace? J'ai pensé: char *ligne ligne= malloc(sizeof(char)); // j'alloue une place pour caractère en mémoire (je fais ça pour pouvoir réallouer) scanf("%s",ligne); ligne=realloc(ligne,strlen(ligne)*sizeof(char)); //Je réalloue la vrai place en mémoire à la ligne printf("%s",ligne); Est-ce que ça va marcher? En ce moment, j'ai du mal avec les chaines de caractères et l'allocation 😅
Alors dans ce cas de figure, on passera pas un buffer, puis on affectera ce qui a été lu à notre donnée d'arrivée, ceci te donnera les éléments qu'il te manque : ua-cam.com/video/dbUDyMtFFlc/v-deo.html
merci beaucoup pour cette vidéo! juste une question: quel est l'intérêt d'utiliser malloc plutot que calloc? vu que calloc initialise à 0, cela rendra toujours le code plus propre non?
Quel émulateur ? +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8/ |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
Ah, c'est l'éditeur de code, là où j'écris mon programme. Tu en as plusieurs que tu peux tester pour trouver celui que tu préfères (Notepad++, Sublime Text, Visual Studio Code, Atom, Brackets, etc.) +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8/ |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
De rien :), c'est très utile pour rendre son code plus lisible. +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8/ |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
Super les explications!Merci beaucoup cependant je voulais savoir si y'a des sections dans ta chaine ou tu propose des exercices parce que tu en parle du coup mais je retrouve pas la section .
Salut ! Tout d'abord, merci pour ta vidéo. J'ai une question et je n'arrive à y répondre. J'ai toujours utilisé malloc exactement comme tu le fais et ça a toujours fonctionné. J'ai été lire de la doc et j'ai appris que malloc renvoyait un pointeur de type void sur le heap (qu'on doit normalement caster dans le bon type) qu'on peut ensuite manipuler à sa guise. Du coup, je n'arrive pas à saisir pourquoi lorsqu'on manipule les données derrière le pointeur, on a pas besoin de le déréférencer. Ca marche comme une variable classique et ça, j'avoue que ça me trotte. Est-ce que tu saurais expliquer pourquoi ça fonctionne comme ça ? Je suis persuadé que je n'ai juste pas bien compris quelque chose et que c'est trivial. Mais là, je ne vois pas où je me plante. Je te remercie pour ton temps et je te souhaite une bonne journée.
Bonjour, la raison est toute simple : c'est le compilateur qui le fait à notre place, d'où le fait de ne pas avoir besoin de déréférencer explicitement notre pointeur 👍
@@formation-video Merci du fond du cœur. 😄 Ça me rendait fou. Et je ne suis jamais tombé précisément sur cette info. D’ailleurs, j’ai constaté que selon le compilateur (et selon sa version surtout) on peut choisir de le faire, ou non. 🤷♂️
Salut. Ta vidéo est superbe. J'aurai juste une question Pourquoi tu as enlevé > après que tu aies initialisé nombreJoueurs à 2 et enlever le scanf ? J'ai refait cet exemple sur un terminal et ça m'affiche pas d'erreur sans le free mais avec le free si. Donc tu as raison. Mais je comprends pas enfaite pourquoi on doit enlever le free. Est ce parce qu'on a initialisé ? Car quand on initialise ça alloue un emplacement mais sinon pourquoi enlever le free ? Si c'est le cas pourquoi utiliser malloc si on a pas de free ? Je sais je demande beaucoup ; merci !
Bonsoir c'est encore moi je souhaiterais poser quelques questions au sujet de l'allocation dynamique , dans mon cas precis je veux creer une fonction qui me permettra de diviser ma chaine de caracteres en mots puis stocker ces mots dans un tableau, donc cela veut dire que lorsque je ferai malloc(sizeof(char *) * le_nombre_de_mots) pour les chaines de caracteres (mots de la phrase) du tableau est ce que la machine me reserve une chaine vide de [255] octets directement ? (si c' est le cas est il necessaire de penser a allouer la memoire au nombre de caractere de chaque mots apres avoir alloue la memoire pour mon tableau plus haut? )
Bonsoir, avec ton instruction malloc dans ton commentaire, tu ne ferais qu'allouer l'espace pour le tableau de pointeurs de caractères. Les pointeurs seraient donc alloués, mais pas les mots eux-mêmes. Donc, il faudra aussi songer à effectuer les allocations pour chaque mot 👍
Ok tu pourrais me donner une idée de comment faire cette foncion bon en gros elle prend en paramètre une chaine de caractères et sépare les mots de la chaîne a chaque caractères non alpha numérique et les stockent dans le tableau qu'elle retournera😢
Faire un "tuto" sur ça reviendrait à écrire le programme complet, et donc, de donner la solution, ce qui serait totalement contre-productif pour apprendre et assimiler. Si tu as des difficultés à visualiser comment tu peux écrire ce programme, n'hésite pas à noter et faire des schémas, des illustrations, et te représenter les opérations à réaliser. Ensuite, il suffira de combler cela avec tes connaissances du langage, et s'il t'en manque à te documenter, c'est fait pour ça 👍
Belle video, tres bon son et tres bien explique, mais j'ai quelques questions. Comment alloue-t-on dynamiquement de la memoire sur une chaine de caractere, on doit compter chaque caractere + le caractere de fin de chaine ? Et est-ce que le calloc () initialise egalement les chaines de caractere a { }, ou il ne fonctionne pas sur les chaines de caracteres (surtout en ce qui concerne l'utilisation de cette fonction sur des structures) ? Merci d'avance !
Bonsoir :). Pour une chaîne, il faut savoir le nombre de caractères (+ 1 pour le caractère de fin, oui), mais pour cela, il suffit d'utiliser la fonction strlen(). Et pour la fonction calloc() sur une chaîne, ce sera initialisé à "null" (l'équivalent de 0 pour une nombre).
Bonsoir , merci encore pour cette vidéo ! Juste quelque chose me perturbe : comment l'ordi sait t il retrouver la bonne adresse avec tableau[i] , sans même savoir si les valeurs font 1,2, ou 4 octets. Et si il le sait , comment ? Merci d'avance
Bonsoir. En mémoire, chaque adresse permet de stocker une donnée sur 8 bits (1 octet). Dans le langage de programmation, chaque type de donnée occupe un espace bien spécifique en mémoire. Par exemple, le type "int" peut occuper 4 octets (32 bits). C'est-à-dire que l'information sera mémorisée sur 4 adresses. Dans un tableau, chaque valeur est mémorisée de manière contigüe (à la suite en mémoire). Donc le compilateur fait sans souci les décalages nécessaires pour accéder aux valeurs.
@@formation-video merci pour votre réponse, mais pardon j'ai due mal poser ma question . Je ne parlais pas au niveau du compilateur, mais plutôt au niveau de l'exécution ( si le i est une variable, je suppose que ça n'est pas au compilateur de gérer ?) Comment le processus fait il pour savoir la longueur des valeurs d'un tableau, et donc pour faire le bon décalage ? Voilà plutôt ma question , merci à vous 😀😁
Une fois le programme compilé, c'est du code machine, qui réalise donc les instructions machine adéquates, et les accès en mémoire se font via les adresses. L'ordinateur n'a plus qu'à exécuter les instructions.
bonsoir monsieur vraiment merci pour le soutient, je peut dire que je comprend mieux avec vos explications qu'en classe. mais j'aimerai savoir quel logiciel est plus adapter en language c pour la programation. j'utilise codeblocks mais ça ne fonctionne pas normallement comme je le souhaite.
Bonjour : le logiciel le plus adapté est celui que tu sais utiliser et qui répond aux besoins que tu as. Code::blocks peut être assez "vieillot" et tu pourrais tout à fait opter pour la solution éditeur de code + compilateur. L'éditeur (VS Code) : ua-cam.com/video/eQUsUq_2AQU/v-deo.html MinGW (si tu es bien sur Windows) : ua-cam.com/video/y-i96kqT53A/v-deo.html
Bonjour, tout d'abord merci beaucoup pour ces cours de très bonnes qualités ! Je voulais vous poser une question, je pense avoir compris les pointeurs mais je sais jamais quand je dois m'en servir, avez-vous des conseils ?
Les pointeurs sont amenés à être utilisés surtout dans des fonctions quand tu dois travailler sur plusieurs données. Ca permet de ne pas avoir à passer de lourdes structures par exemple, mais simplement le pointeur pour y mener = gain de performances. Exemple, une fonction qui va afficher les infos du joueur, mieux vaut passer en paramètre simplement un pointeur vers le joueur en question, plutôt que toutes les infos :)
Bonsoir, j'ai deux questions à vous posez si on décide de faire plusieurs malloc dans des fonctions, les free() on les mets en fin de fonction ou du main ? et est ce qu'on a le droit d'utilisé 2 fois la meme varriable pour faire 2 malloc dans 2 fonction differente ? dans ce cas on devra aussi metre 2 free ?
Bonsoir, tu vas autant d'appels à free() que tu auras fait d'allocations, au risque de te retrouver avec des fuites mémoire, même le programme une fois terminé. Pour la libération de la mémoire (appel à free), il doit être fait au plus tôt, c'est-à-dire quand ton programme n'a plus besoin de la ressource que tu as alloué 👍
@@formation-video D'accors, du coup si je fais un free() dans la fonction ou je fais l'allocation, il y a plus besoin de faire dans le main ? ou bien vaux mieux aussi dans le mais pour plus de sécutité ?
Bah non, c'est une seule fois que tu libères la ressource. De toute manière, si tu fais appel à free() sur une ressource déjà libérée, il ne se passera juste rien
C:\Users\gareth lysander\Desktop\BAIN>gcc main.c -o word main.c: In function 'main': main.c:12:14: error: 'nombrejoueurs' undeclared (first use in this function) scanf("%d", &nombrejoueurs); ^~~~~~~~~~~~~ main.c:12:14: note: each undeclared identifier is reported only once for each function it appears in C:\Users\gareth lysander\Desktop\BAIN> bonjour j'ai un problème d'érreur vous pouver m'aidé
@@formation-video j'ai tapé ce code exactement comme dans la vidéo et j'ai vérifier pour voir si il ni a pas d'érreur je te met le code #include #include int main(void) {
int nombreJoueurs = 0; int *liste_joueurs = NULL; int i; printf("Combien de joueurs ? "); scanf("%d", &nombrejoueurs); liste_joueurs = malloc(sizeof(int) * nombrejoueurs); if(liste_joueurs == NULL) exit(1); for(i = 0 ; i < nombrejoueurs ; i++) { printf("joueur %d -> numero %d ", i + 1, i * 3); liste_joueurs[i] = i * 3; } for(i = 0 ; i < nombrejoueurs ; i++) { printf ("[%d] " , liste_joueurs[i]); } free(liste_joueurs); return 0; }
Donc non, tu n'as pas recopié le même code. La variable que tu as déclaré s'appelle "nombreJoueurs" et la variable que tu tentes de passer au scanf() est "nombrejoueurs", ce ne sont donc pas les mêmes.
@@formation-video oui j' ai mis un déclaration avec un majuscule et avec le scanf je les mis en minuscule ils faut que je fasse gaffe avec la déclarations que je met un grand Merci a toi jason
Bonsoir claire la video comme dab je kif. Dans l'exemple que tu donnes, le programmeur ne sait pas de combien d'espace il aura besoin mais par contre l'utilisateur si (cas des joueurs). Mais en admettant que l'utilisateur lui meme ne sache pas (patr exemple s'il est en train de saisir un texte compter tous les caractères c'est quasi impossible) comment pourrais je faire pour allouer l'espace necessaire exact. Merci d'avance :)
Bonjour, attention, quand je dis que le programme ne sait pas à l'avance combien allouer, l'utilisateur c'est la même chose. Par exemple, toi tu vas vouloir 2 joueurs, mais si un autre utilise le programme, il en voudra peut-être 10. C'est pour cela qu'il faut gérer dynamiquement (malloc/free) l'espace à utiliser en fonction de ce que souhaite l'utilisateur. Du coup, pour ton problème, celui d'allouer une chaîne de X caractères, il suffit simplement de demander le nombre de caractères voulus, puis de faire un malloc() de X fois le nombre de "char" qu'il faut, et voilà ;) +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8 |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
@@formation-video mais dans le cas ou je sais pas combien de lettres c'est quoi la solution ? j'ai eu l'idée de faire l'enregistrement du texte caractere par caractere dans un fichier mais c'est pas du tout ideal
Renvoyer 0 ou quitter en renvoyant un code d'erreur 0 indique en informatique que tout s'est bien passé. Après, c'est une convention, l'important c'est surtout de stopper l'exécution du programme, mais tu peux bien retourner ce que tu veux. Juste qu'il est pensé de base que : 0 -> tout s'est bien passé autre valeur -> une erreur est survenue
@@formation-video Dans ce cas et par simple curiosité (malsaine ?) dans la fonction main pourrait-on replacer le return 0 par un exit(0) et passer main en void ? Si on utilise le return 0 c'est par convention, restriction langage, vitesse du vent , âge du capitaine... ?
En réalité non. Si tu fais une allocation mémoire d'un espace de 0, la fonction va te retourner NULL ou une adresse unique (non accessible, mais qui sera à libérer), suivant l'implémentation
Salut! En cours nous avions vu qu'il faut caster le malloc ou le calloc en un pointeur d'entier car ces deux fonctions de base retournent des void * En gros on a ces deux fonctions qui sont construites de cette façon: void * malloc(taille_octets) void * calloc(nb_objet , taille_octet) dans notre cas il faudrait écrire liste_joueurs = (int *) malloc(nombreJoueurs*sizeof(int)) Dans votre vidéo on voit qu'on a pas besoin de caster, quel est donc l'intérer de la transtypation ici ? En tout cas, super vidéo très pédagogique :)
Coucou, ce que tu as vu en cours est une grosse erreur, que malheureusement beaucoup d'écoles font. Je m'explique : à l'époque, on faisait un cast des fonctions comme malloc() car il n'y avait pas de pointeur générique, et qu'en plus le type de retour était différent, du char* Concernant le langage C, la norme indique que le pointeur générique (void*) prend automatiquement le type de la donnée voulue, donc il est absolument inutile de faire un cast, cela pourrait même entraîner certaines erreurs. Par contre, si c'était du C++, là il faudrait le faire. C'est aussi pour cela que beaucoup ont pris la mauvaise habitude de le faire également en C. Donc en résumé : ne pas faire de cast en C, seulement pour C++
bonjour dans cette vidéo je ne comprends si liste joueur est un pointeur ou un tableau je ne sais pas si quelu'un qui passe par la peut m'expliquer merci
Bonjour, la liste de joueurs est un tableau (dont la taille est fixée à l'exécution, pour correspondre au nombre de joueurs demandés par l'utilisateur)
En fait, quand tu utilises l'étiquette (le nom de ta variable) pour ton tableau, cela se comporte comme un pointeur vers le premier élément de ce dernier. Et de là on retrouve facilement tous les autres car un tableau a toutes ses valeurs qui se suivent en mémoire. Ici, on ne sait pas la taille de notre tableau donc on déclare un pointeur sur entier. Ensuite, on va allouer un espace pour notre tableau. Ce pointeur va pointer non pas sur un entier isolé, mais un entier qui est le premier élément de notre tableau.
Bonsoir Jason, ça fait un petit moment. non? Voilà, apparemment on ne peut utiliser realloc qu'une seule fois. Est-ce le cas ? Merci pour ta réponse. Bonne continuation.
@@formation-video Bonjour Jason, Oups, je n'ai jamais répondu et, j'avoue, je suis passé à autre chose ^^ . Maintenant j'ai un souci avec malloc Y a-t-il une limite en octets pour une allocation ? J'essaie de créer un tableau de pixels à partir d'une texture et par la suite des couleurs (SDL_Color couleurs[WIDTH*HEIGHT]) mais on dirait que celui-ci est trop important. Quand je veux afficher le résultat, je vois qu'il a fait le travail en partie. Pourtant, il compile. Est-ce que les erreurs de segmentations ne sont pas censées être signalées à la compilation (gcc) le cas échéant ? Bonne journée.
Salut, et merci une fois de plus tu sauves le mondes amateur et même pro en info; je suis maintenant au niveau des graphes , mais j'ai une question toute bête : s'il vous plait je peux savoir a sert de retourner les nombres, les tableaux ?
Et bien, prends l'exemple d'une fonction qui trierait les éléments d'un tableau dans un ordre. Elle rendrait alors un tableau trié à partir d'un tableau en désordre qu'on lui aurait passé ;)
question:comment le programme fait difference entre un pointeur et un pointeur sur un premier element d'un tableau dans la declaration puisque ils sont déclarés de la meme façon
En fait, pour un tableau, on a un pointeur vers le premier élément de celui-ci. Il n'a donc pas besoin de faire de différence. Écrire par exemple -> int *tab est un pointeur vers un élément de type (int), qui est peut être isolé, ou un élément en première position d'un tableau. ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ MERCI DE TON SOUTIEN ! 🔻 ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙 ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA ◾ Site web : jasonchampagne.fr ◾ Discord : discord.me/jasonchampagne ◾ Twitch : www.twitch.tv/jachampagne ◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne ◾ Twitter : twitter.com/jachampagne8 ◾ Facebook : facebook.com/jachampagne8 ◾ Instagram : instagram.com/jachampagne8 ◾ Snapchat : www.snapchat.com/add/jachampagne8 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
En soi, realloc() recopie les données, sauf si le nouvel espace alloué s'en trouve plus petit que l'ancien. Mais généralement, on ré-alloue de l'espace pour en disposer davantage 😉 ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ 💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA ◾ Site web : jasonchampagne.fr ◾ Discord : discord.me/jasonchampagne ◾ Twitch : www.twitch.tv/jachampagne ◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne ◾ Twitter : twitter.com/jachampagne8 ◾ Facebook : facebook.com/jachampagne8 ◾ Instagram : instagram.com/jachampagne8 ◾ Snapchat : www.snapchat.com/add/jachampagne8
Bonjour j'ai quelques question à poser. Est-il possible d'allouer dynamiquement un espace pour une variable et non pour un pointeur ? Si j'alloue un espace mémoire que je n'attribue à aucun objet ( variables ou tableau ou fonction ), pourrais-je quand même la libérer ( ou alors c'est impossible de faire ça car considéré comme une erreur ou corrigé par le compilateur ) ? Et lorsque j'ai une fuite mémoire, c'est rattrapable Ou C'est vraiment grave ??
Bonjour, en fait un pointeur est une variable, à la différence qu'elle mémorise un adresse, pas une valeur. Pour une variable simple, il n'y a pas besoin d'allouer d'espace car ce sont des types primitifs qui ont déjà leur taille fixe. Ensuite, tu ne peux pas allouer un espace mémoire à rien, cela se fait forcément sur une donnée, et le contraire n'aurait absolument aucun sens. Enfin, une fuite mémoire n'est pas rattrapable, cela survient quand des ressources allouées n'ont pas été libérées. Même lorsque ton programme se termine, ces ressources sont toujours dans la mémoire, ce qui à terme fait saturer ton système. ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ MERCI DE TON SOUTIEN ! 🔻 ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙 ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA ◾ Site web : jasonchampagne.fr ◾ Discord : discord.me/jasonchampagne ◾ Twitch : www.twitch.tv/jachampagne ◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne ◾ Twitter : twitter.com/jachampagne8 ◾ Facebook : facebook.com/jachampagne8 ◾ Instagram : instagram.com/jachampagne8 ◾ Snapchat : www.snapchat.com/add/jachampagne8 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video merci beaucoup de ces réponses... mais excusez moi, je viens de tester ce code : #include #include int main(void) { int *ptr = malloc(sizeof(int)); if(ptr == NULL) exit(1); *ptr = 10; printf("valeur = %d , adresse pointeur = %X, adresse var = %X ", *ptr, &ptr, ptr); free(ptr); printf("valeur = %d , adresse pointeur = %X, adresse var = %X ", *ptr, &ptr, ptr); return 0; } et ceci est imprimé : valeur = 10 , adresse pointeur = 61FF1C, adresse var = 672A20 valeur = 6758728 , adresse pointeur = 61FF1C, adresse var = 672A20 c'est normal que la valeur ait changé et que le reste ait pas changé ? je pensais que vu que je libère la mémoire, alors il n'y a pas d'adresse défini...
Pour avoir un nettoyage au niveau de l'adresse, il faut affecter la valeur NULL au pointeur, donc faire : free(ptr); ptr = NULL; ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ MERCI DE TON SOUTIEN ! 🔻 ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙 ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA ◾ Site web : jasonchampagne.fr ◾ Discord : discord.me/jasonchampagne ◾ Twitch : www.twitch.tv/jachampagne ◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne ◾ Twitter : twitter.com/jachampagne8 ◾ Facebook : facebook.com/jachampagne8 ◾ Instagram : instagram.com/jachampagne8 ◾ Snapchat : www.snapchat.com/add/jachampagne8 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Bonjour, merci beaucoup pour tes vidéos, je suis en formation concepteur développeur je ne comprenais pratiquement rien au langage C jusqu'à ce que je tombe sur tes vidéos qui m'ont redonné espoir! J'aurais quelques questions concernant celle-ci: 1) Quand tu utilises le calloc pour la taille ce n'est pas : nombreJoueurs * sizeof(int) ?? 2) Pourquoi pour la fonction calloc tu utilises la donnée "nombreJoueurs" et pour la fonction realloc tu utilises la donnée "liste_joueurs"? 3) Il y a aussi une chose que je ne comprends pas quand tu utilises le calloc et le malloc à 16:37! Quand tu utilises le malloc, pour les deux premiers joueurs tu dis que ça met des valeurs par défaut parce qu'il prend des emplacements qui avaient déjà des valeurs dedans! Donc en fait l'allocation dynamique ça permet d'allouer dynamiquement une zone mémoire libre mais pas forcément vide, c'est ça?
Bonsoir :). 1) Non, car autant malloc() ne prend qu'un seul paramètre (la taille en octets que l'on veut allouer), autant calloc() prend les deux paramètres séparément - l'un étant le nombre d'éléments à allouer, l'autre la taille de ces éléments). Pour cela que je fais donc -> *calloc(nombreJoueurs, sizeof(int))* 2) Alors cela vient de la signature des fonctions. Pour malloc()/calloc(), on demande le nombre d'éléments et la taille de chacun d'eux. En revanche, pour la fonction realloc(), on demande directement un pointeur et la taille que l'on va allouer pour cette ré-allocation. 3) Oui voilà, il va te réserver en mémoire des zones qui ne sont pas (ou plus utilisées) ailleurs. Donc ça peut parfois tomber sur des emplacements qui ont déjà servi. D'où la nécessité de les initialiser, ou de leur affecter rapidement des valeurs voulues pour éviter de se retrouver avec n'importe quoi.
Bonjour, tout d'abord un grand merci pour toutes videos, tu es tres pedagogue et tu as un reel talent pour ca et je t'en remercie. J'ai une petite question lol, si malloc a echoué il faut sortir du programme avec exit(1), or j'ai pu voir sur un cours de openClassRoom qu'il fallait ecrire exit(0) ... et avant de te poser la question je l'ai posé a ChatGPT, qui me dit qu il faut ecrire : exit(EXIT_FAILURE), pourrais tu m'eclairer ? Les 3 solutions sont-elles valables et surtout pourquoi ???? hahaha . Merci encore pour tout ce que tu fais. Cordialement,
Bonjour, D'abord, tu devrais éviter le cours OpenClassrooms qui n'est clairement plus à jour et bourré d'erreurs signalées maintes fois par des internautes, et non corrigées depuis. Ensuite, par convention il est d'usage avec les codes de retour, d'utiliser le 0 quand tout s'est bien passé, et toute autre valeur en cas d'erreur. De ce fait, quitter le programme en retournant 0 laisse croire qu'il a quitté sans erreurs. Or si l'appel à malloc() ne parvient pas à allouer de l'espace en mémoire, c'est un cas d'erreur. Ensuite, EXIT_FAILURE est une constante, c'est aussi valide et utilisable, et cela correspond à...la valeur 0. Cette constante (comme son opposé EXIT_SUCCESS) fait partie de l'entête stdlib.h Donc, tu peux au choix utiliser une valeur numérique comme 0, ou la constante EXIT_FAILURE 👍
Bonsoir j'espère que vous allez bien J'ai des difficultés avec l allocation dynamique au niveau de la syntaxes en effet lorsque j écrit int *tab et que j j'utilise malloc pour l'allocation dynamique un message d erreur s'affiche (assigning to 'int *' from incompatible Type 'void *') je ne comprend pas merci de me répondre car ce problème me bloque dans mon apprentissage de langage c
@@formation-video ok voici la syntaxes : #include #include int main () { int notes; int *tab= NULL; int i; printf ("combien de notes avez vous ? "); scanf ("%d",¬es); tab = malloc(notes * sizeof(int)); if (tab==NULL) { exit(1); } for (i=0; i
OK, alors cela vient de ton affichage, tu as un "&" de trop dans ton printf(). Aussi, tu as oublié le "void" dans les parenthèses de la fonction main() - un code corrigé : pastebin.com/KUxEcNga
super video merci beaucoup ! 🐐 je voulais savoir que si on ne sait pas combien de joueur vont rejoindre la partie( c a d combien ajouter au realoc) est ce qu on peu maloc le realoc je sais pas trop si tu a compris ce que je voulais dire c dit un peu bizarrement mais voila
Oui, realloc() sert à cela, si tu dois ajouter un nouveau joueur en cours de partie alors que tu as déjà alloué l'espace il suffit de réallouer avec un espace plus grand et suffisant pour accueillir le nouveau 👍
Bonne vidéo! Juste une précision : sizeof n'est pas une fonction, mais un opérateur. Une fonction ne pourrait pas prendre en paramètre un type. Aussi, contrairement aux fonctions, la valeur de sizeof est évaluée au stade de compilation (à moins qu'on l'utilise sur un tableau dynamique depuis C99).
Bonsoir. Oui tu peux, en allouant d'abord le nombre de lignes du tableau, et pour chaque ligne, le nombre de colonnes, pour avoir tes 2 dimensions. Il faudra donc utiliser des boucles, et bien penser à libérer la mémoire aussi avec des free(), en usant d'une boucle également bien sûr. +---------------------------------------------------------------------------------------------------------------------------------------------+ |- Jason CHAMPAGNE - jasonchampagne.fr +---------------------------------------------------------------------------------------------------------------------------------------------+ |- COUCOU, TU VEUX : |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne |--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne |--- Me follow sur Twitter ? twitter.com/jachampagne8 |--- Liker la page Facebook ? facebook.com/jachampagne8 |--- Me follow sur Insta ? instagram.com/jachampagne8 |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8 +---------------------------------------------------------------------------------------------------------------------------------------------+
Nouvelle notion très importante du langage C, l'allocation de mémoire de manière dynamique. Ce procédé permet par exemple de réserver un espace dont une ne sait pas à l'avance quelle taille il fera.
Vraiment merci tu ma sauver
Pouvez vous m'expliquer pourquoi chaque fois on le met cet multiplication en haut de
*liste_joueurs et aussi sizeof(int ) * nombreJoueurs, nombreJoueurs * sizeof(int ) . Ce quoi l'utilite de cet etoile ..
Et deuxiement si je laisse son etoile qsk va se changer ou bien ca serai la meme chose merci d'avance
Et pourquoi lorsq nous somme ds calloc on fait pas l'etoile * . Vraiment sauve moi je besoin a savoir plz mn frere
regarde la video sur les pointeurs
Je crois que j'ai plus appris en language c en quelques mois que d'anglais pendant 2 ans ! Tu expliques super bien en détaillant tout ce que tu écris et a quoi ça sert du coup je comprends très bien le language surtout que je suis assez jeune, au collège, et que d'habitude pour mon age il est difficile d'assimiler, eh bien la, j'apprend super vite grace a toi. Merci infiniment pour tout ce que tu fais !
Content de l'apprendre, bonne progression dans ce langage par ailleurs ✌
Félicitations, c'est bien d'être curieux et de vouloir apprendre à un si jeune âge.
Merci beaucoup pour tes vidéos! Elles sont super claires et j'ai tout compris! J'ai réussi mon partiel grâce à toi! Merci!
Ah bonne nouvelle, mais n'oublie pas que c'est surtout grâce à toi d'abord 🙂👍
Encore une fois, explication clair net et précise.
Impeccable pour toi alors, bonne continuation ;)
Premierement je te remercie bcp mille fois et tu merite plus que ca et la formation ca ma vraiment aide bcp merci encore je ne jamais vu dans youtube une formation C comme toi actuellement j ai entain de terminer bientot .
Bonjour et merci beaucoup pour ton commentaire :) !
Merci infiniment pour ce parfait cours.
De rien =)
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
Merci d'exister monsieur Jason Champagne, vous êtes une bénédiction pour nous tous.... et je n'exagère même pas ! :)
Merci pour ton message 🙏
Merci beaucoup pour tes vidéos
On fait programmation système à la fac et je savais pas à quoi sert malloc, super explication continue ainsi
Impeccable 😉
Quand j'ai regardé l'heure à laquelle tu as tourné cette vidéo...
J'ai cru que c'était l'heure de mon PC !
Ahah, je me souviens d'anciennes vidéos faites pendant la nuit ;)
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
Excellente vidéo! Très utile pour ma part en Licence Informatique pour une révision de la notion merci a toi :)
Bonjour et bonnes révisions à toi dans ce cas :) !
Merci pour tout ces cours !!
Vous êtes le meilleur continué comme ça.
Merci 🙏
Super vidéo et explications limpides comme toujours. On s'était pris un zéro avec mes camarades de piscine lors d'un rush sur un towerdoku : on avait oublié de libérer la mémoire à la fin du programme. Deux jours de travail mis à la poubelle juste à cause d'un free manquant. 😢
Ah, c'est sûr que ça cassait tout le boulot effectué
Je rejoins l'avis général, super explication ! Ça faisait plusieurs séances de cours que j'étais largué 😂... (L'avenir de l'enseignement est sur yt.) Merci beaucoup ! ☺
Content que tu as pu comprendre. Une fois que c'est assimilé, les pointeurs et la gestion de la mémoire en C ne sont plus si compliqués à employer :)
J'étais bien là. Je suivais ta vidéo et tout, j'étais à fond jusqu'au moment où tu fais "c'est-à-dur". Ça m'a tué !! :D
👀
t'es trop fort mec , continue :)
Merci à toi :) !
Merci beaucoup monsieur pour vos vidéos :)
De rien, bonne continuation 👋
J'adore tes vidéos tu explique bien et tu es claire c'est juste parfais !
Content que cela te convienne, bonne continuation 👍
Très bien expliqué 😘, merci beaucoup.
De rien, merci à toi 😊
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
Si tu souhaites allouer de la mémoire consécutive pour plusieurs variables de même
type (typiquement un tableau dynamique), c'est mieux d'utiliser calloc que malloc.
Parce que p = malloc(n * sizeof(Type)) peut engendrer un overflow sur la multiplication
et allouer en fait bien moins que n cases, ce qui peut ensuite conduire à un
débordement mémoire sur p[i].
Sinon bonne vidéo !
Bonsoir, j'imagine que tu fais référence au fait qu'avec malloc(), comme la mémoire n'est pas initialisé, si on passe une taille qui dépasse la borne max. d'un entier par exemple, on aura un débordement, là où calloc() le bloquera ?
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
Ça fait 6 ans la vidéo a été publié, mdr 😂. Merciii pour tes vidéos ça m'a beaucoup aidé même si tes vidéos sont super longues
Bonne continuation 👍
Si les vidéos sont longues pour toi, regarde-les juste en plusieurs fois.
merci pour le tutoriel JASON
De rien, c'est un concept très important en plus :)
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8/
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
MERCI D’ÊTRE LÀ MERCI VRAIMENT🙏🏼
Je t'en prie 🙂
Bonjour Merci pour toutes ces videos !
Je t'en prie 🙏
Super bien expliqué comme d'habitude... Je pense que ta chaîne a sauvé ma première semaine de piscine.
Bon courage et accroche-toi 🙂 !
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ MERCI DE TON SOUTIEN ! 🔻
◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Merci mais vraiment ça se passe bien!
Je sais pas comment j’aurais pu faire sans tes vidéos! Encore merci!
Tant mieux, ça montre que tu aimes ce que tu fais et que ça te motive à apprendre :)
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ MERCI DE TON SOUTIEN ! 🔻
◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
ALors t'as reussi ?
Merci pour cette video, impatient de voir les autres !
Bonne suite alors =)
Merci beaucoup, c’est très clair
De rien, bonne continuation Dylan 👋
merci Jason pour tous tes efforts ça bous aide énormément!(
De rien 😉
vous expliquez trop bien
Merci à toi =)
Merci énormément pour ce cours
De rien ;)
Merci beaucoup pour la video c'est vraiment top
Bonne continuation en C
Merci pour les explications de qualité
Bonne continuation !
Merci à toi ! ✌
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
bonne explication claire et simple merci beaucoup
Bon courage sur la suite Amine =)
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
Bonjour, j'ai une question ! J'ai un tableau de chaine de caractère dynamique , et je dois transférer dans une chaine dynamique chaque mot du tableau en concatenant à chaque fois. Ca veut dire transformer le tableau de chaine de caractère dynamique en une phrase concaténée et contenue dans ma chaine de caractère dynamique. Jusqu'ici je parviens à réaliser le programme, cependant j'aimerai, à chaque fois que je transfère un mot, le supprimer du tableau après. J'ai pensé à utilisé la fonction realloc( ) mais je ne parviens à supprimer malgré tout. J'ai besoin de votre aide :) Merci pour la vidéo !
Bonjour, pour supprimer, tu peux remplacer chacun des caractères par un '\0', tout simplement.
Mais attention, si tu as alloué dynamiquement un espace mémoire, ce dernier devra dans tous les cas être libéré une fois que tu n'en as plus besoin.
tu est excellent mec c est troos bien
Merci à toi Abdou :)
Jason Merci pour tout Les efforts que tu fais, j'ai une question ton compilateur ta pas forcer a cast le retour de ta Fonction malloc par contre moi Oui. Pourquoi stp?
Maintenant, il n'est plus nécessaire de caster le retour de malloc(), sauf si tu as un compilateur datant d'il y a 20 ans :D.
Donc plus besoin de faire (int*) malloc(sizeof(int)) par exemple, mais juste malloc(sizeof(int))
Merci pour la vidéo
👍
Bonjour, je n'ai pas compris pourquoi realloc prend liste_joueurs en paramètre alors que liste_joueurs est déjà à gauche du signe =, pouvez-vous m'éclairer svp ? merci pour vos vidéos
Bonjour, si tu ne comprends pas l'opérateur d'affectation, il va falloir revenir sur les premières vidéos du cours.
Par exemple, quand j'ai cette expression -> result = 156 + 8;
On a l'opération 156 + 8 qui est effectuée, puis la somme est affectée à la variable "result".
Si on désire utiliser un tableau qu'on a alloué dynamiquement durant toute la période d'un jeu programmé. Faut il à chaque fois ré-allouer la mémoire et refaire un free en boucle ? Merci
Non, tu vas allouer ton tableau une seule fois, avec la place que tu as besoin, t'en servir au cours de l'exécution du programme (éventuellement ré-allouer un espace plus grand/petit si nécessaire), et libérer le tout à la fin (ou au mieux, quand les ressources ne sont plus utilisées, pour optimiser les performances)
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8/
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
bonjour, je ne comprends pas pourquoi est ce qu'il a fallut à 12:00 déclarer liste_joueurs en pointeur ? En plus, plus tard dans le programme il devient un tableau qui est lui-même un pointeur, donc je ne comprends pas l'utilité de le déclaré en pointeur ?
A part ca, j'ai essayé dans ce programme de prendre le 'printf ("[%d]",listeJoueur[i]);' qui se trouve dans le deuxième for et de l’insérer dans le premier ce qui m'a écrit dans le programme chaque case dans une ligne au lieu que ce soit toutes les cases sur une même ligne comme dans ton programme en mettant un deuxième for et je ne comprend pas pourquoi il faut mettre un nouveau for pour que ça marche?
merci encore pour toutes tes réponses et tes vidéos de qualité!
La liste des joueurs est déclarée comme pointeur car on va fait une allocation dynamique par la suite (ce n'est pas un tableau à taille fixe spécifiée à la déclaration de ce tableau).
Ensuite, le deuxième n'est en rien obligatoire comme tu l'as vu, puisqu'ils font le même parcours (du premier élément du tableau au dernier, donc tu pouvais sans soucis tout mettre dans un seul et gérer ton affichage comme tu le souhaites 🙂
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
J'ai compilé le programme sur Eclipse et cela ne marche pas pourtant j'ai exactement les mêmes lignes de codes :/
Quelle erreur te donne le compilateur ?
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
Bonjour à 7 : 50, vous dites que après avoir allouer dynamiquement une zone mémoire pour le pointeur, on va créer un tableau de x joueurs, a quel moment la création du tableau s'est faite?
De plus je ne vois pas en quoi, dans cet exemple allouer une zone de mémoire pour le pointeur liste_joueurs est utile, en exécutant le programme sans malloc le résultat est strictement le même.
Bonjour, l'allocation dynamique est effectivement utile quand on ne sait pas à l'avance quelle taille on doit allouer. Si on le sait, il suffit de créer le tableau avec une taille fixe directement inscrite dans le code (ex : tableau[4]). Mais si la taille du tableau doit être générée/choisie à l'exécution du programme, il faudra passer par une allocation dynamique.
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
Bonsoir, je débute en C. Je code en java, et je ne connais pas très bien les pointeurs et les allocations dynamiques, si je créé un tableau en passant par :
int *tab;
int taille;
scanf("%d",&taille);
tab = malloc(sizeof(int) * taille);
comment jpeux créer une matrice int[][] dans ce cas?
Bonjour, si ce n'est pas fait, je te recommande de voir les autres vidéos du cours en C (notamment et justement concernant les pointeurs, les tableaux, les chaînes de caractères, etc.)
Donc pour allouer un tableau à deux dimensions, il faudra parcourir chaque case de la dimension 1, et allouer la taille nécessaire pour la dimension 2.
Oui j’ai regardé, c’est juste un peu dur à appliquer comme c’est nouveau, merci de votre réponse :)
Oui, il faut prendre le temps et ça finira par entrer
Exellente explication !!!
une question : dans certain code on ecrit par exemple : tab= (int*) malloc (5*sizeof(int))
à quoi ca sert cette (int *) pourquoi on l'écrit ??
C'est de l'ancien code, à l'époque il fallait obligatoirement caster le retour de la fonction malloc(), ce qui n'est plus le cas (et plus à faire) depuis un bon bout de temps 😉
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
bonjour j'ai une petite question concernant la liste de joueur qu'on a creé sous forme de pointeur : est ce qu'on ne peut pas declarer la liste de joueur sous forme de tableau sans l'initialiser comme ca int listejoueurs[ ];
Tu peux tester dans ton code et tu verras ce que ça donne 😉
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
Ce que je remarque j'utilise Dev-C++ et j arrivai pas a execute ton programme mais desq j ai effacer la partie ''''''' if (liste_joueurs == NULL) ;
exit(1);''''''''''''' j ai pu excuter . Et le problem que tu disais il y aura des bug j'ai essayer mm si tu rentre pas qlk choses et que c'est vide le programme va etre en mode console rien ne marche jusqa que tu rentre qlk choses dc ''''''''il n yaura pas des bug''''''''' . Merci
Le logiciel Dev C++ se fait vieux, tu ferais mieux d'utiliser un autre environnement comme Code::blocks.
efface le point virgule aprés ton if (liste_joueurs == NULL) ;
Pouvez vous m'expliquer pourquoi chaque fois on le met cet multiplication en haut de
*liste_joueurs et aussi sizeof(int ) * nombreJoueurs, nombreJoueurs * sizeof(int ) . Ce quoi l'utilite de cet etoile ...
Il ne s'agit pas d'une multiplication mais de la notation d'un pointeur. N'hésite pas à revoir la vidéo sur les pointeurs pour en comprendre tout son fonctionnement :)
Je comprend cest un pointeur mm ca ma confuse un peu frere
Tu peux m'expliquer si tu peux sn merci
Alors dans le malloc(), l'étoile est bien pour une multiplication, puisqu'on demande d'allouer en mémoire la taille d'un entier (int) fois le nombre de joueurs qu'il y a.
En revanche, la liste de joueurs, comme on ne sait pas d'avance quelle taille elle fera est un pointeur, que l'on va ensuite allouer pour former un tableau de X éléments, où X est le nombre de joueurs choisis par l'utilisateur.
Bonsoir monsieur.
En voulant compiler mon programme, il signale toujours une erreur au niveau du malloc alors qu'il en a pas. Merci d'avance pour votre aide
Bonsoir, montre ton code
Svp comme comment écrit un programme d'allocation dynamique des tableau en c qui demande un nom et en suite les notes. lorsque j'écris printf("entre le nom de l'élève
");
Scanf("%c",&nom"); j'ai compilé et ça demande bien le non mais une fois le nom saisir le programme ne continue plus sur le tableau ça s'arrête
Quel est le code complet ?
Bro t'es un crackito
salut je voulais savoir si pour faire des fgets/c ou fscanf il fallait nécessairement que les fichiers soit crées avant de lancer le code ?
Pas si tu lis dans autre chose qu'un fichier. Mais quand tu cherches à ouvrir en lecture seule, il faut évidemment que ce dernier existe déjà (cela n'aurait aucun sens d'ouvrir en lecture un fichier qui n'existe pas)
J'ai fait le même truc que toi sur les joueurs au début et je m'suis tapé le délire de mettre 99999 joueurs, mon pc a crash GG !
Nice 👍
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ MERCI DE TON SOUTIEN ! 🔻
◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
bonjour moi j'ai u un souci avec exit(1) j'ai du le remplacer par return 0 et sa fonctionne, sa risque rien quand même ?
Bonjour, pour utiliser la fonction exit(), il faut penser à inclure l'en-tête "stdlib" en début de fichier, en plus de "stdio".
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ MERCI DE TON SOUTIEN ! 🔻
◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Bravo! Merci
De rien :)
J’ai lu ce cours mais j’aimerais savoir comment allouer une mémoire en c pour y mettre des mots comme un tableau de mots ou nom dans un tableau avec malloc j’ai essayé avec un int mais je n’arrive pas avec un char ???
Donc, tu veux un tableau de chaînes : pastebin.com/LpMrjeG0
Bonjour Merci pour toutes ces videos ! Petite question comment fait tu pour mettre ton cmd en bleu ? Merci d'avance !
Bonjour, quand ton terminal est ouvert, en haut à gauche de la fenêtre tu fais un clic-droit sur l'icône > Propriétés 👍
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ MERCI DE TON SOUTIEN ! 🔻
◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
est il possible d'avoir un lien pour s'exercer sur le c?
merci
La playlist des exercices en C est ici : ua-cam.com/play/PLrSOXFDHBtfF6lXQpJ4hBha76DsQufiEQ.html
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
bonjour,
je souhaite créer un tableau dont je ne connais pas la taille sauf que c'est un tableau composé de type comment faire dans ce cas la par exemple j'ai:
type defstruct{
int mois;
int jour ;
char prenom[20]
int annee;
}
date tab [N]
sauf que ne connais pas N ça dépendre du nombre de date que mon utilisateur voudra rentrer ...
Bonjour, comme pour n'importe quel type de donnée, tu peux simplement déclarer un date *tab - ensuite tu demanderas la taille à l'utilisateur et tu pourras ensuite allouer le nombre de dates nécessaires.
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ MERCI DE TON SOUTIEN ! 🔻
◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Life saver , Thank u so muuch :D
Bon courage avec ce que tu apprends en C, et n'hésite pas si tu as besoin 😉
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
merci infiniment
De rien 👋
J'ai un problème:
depuis aujourd'hui, dès que je compile un programme, windows defender le reconnait en tant que menace :/
Comment faire pour y remédier ?
Merci d'avance
Il faudrait passer en liste blanche/d'exclusion ton répertoire de travail : support.microsoft.com/fr-fr/help/4028485/windows-10-add-an-exclusion-to-windows-security
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ MERCI DE TON SOUTIEN ! 🔻
◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video merci, mais est-ce normal que ce problème n'intervient que quelque fois (hier tout le temps aujourd'hui sans rien faire jamais)?
Oui, tout dépend de comment est analysé le fichier par ton antivirus
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ MERCI DE TON SOUTIEN ! 🔻
◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video OK merci !!!!!!
Salut tes vidéos sont super bien, je comprend bien mieux grâce à toi, merci beaucoup.
Je voulais savoir si tu connaissais un bon site internet avec exercice corrigé de niveau plutôt débutant ou même tout niveau ça me permettrai de progresser?
Salut, une recherche sur n'importe quel moteur du style "exercices langage C corrigés" fait toujours l'affaire.
Sinon, il y a cette playlist : github.com/jasonchampagne/FormationVideo/blob/master/Playlists/c-exercices.md
bonjour Jason,
comment faire pour réduire la taille d'1 tableau dynamiquement.
Bonsoir, il faudra ré-allouer un nouvel espace plus petit, tout en pensant à libérer l'ancien
merciiii
Pas de quoi =)
bon travail merci
De rien 🙂
#include
#include
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/*
sizeof() : retourner la taille en octets d'une donnee
malloc() : allouer dynamiquement une zone memoire
*/
int main(void) {
int nombreJoueurs=0 ;
int * liste_joueurs = NULL ;
int i ;
printf("Combien des joueurs ?") ;
scanf("%d" ,&nombreJoueurs);
liste_joueurs = malloc(sizeof(int ) * nombreJoueurs) ;
if (liste_joueurs == NULL) ;
exit(1);
for (i = 0 ; i< nombreJoueurs; i++){
printf("Joueurs %d -> numero %d
", i+1 , i*3);
liste_joueurs[i] = i * 3 ;
}
for (i = 0 ; i< nombreJoueurs ; i++){
printf("[%d] ",liste_joueurs[i]);
}
free(liste_joueurs) ;
return 0;
}
Le programme s arrette apres le scanf chez moi
Scanf c'est tout sauf safe
Il faut faire un if(fgets(buf, sizeof buf, stdin) ) {}
Re chef je voulais savoir si j'utilise calloc sur une struct qu'est-ce qui ce passe tout sera a 0 ou null ou bien quelque chose de différent
Toutes les bits seront à 0.
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
il ya un truc de l'allocation dynamique que je ne pige pas. Par exemple, un utilisateur doit rentrer une chaine de caractère. Donc on ne connait pas la taille au préalable. Donc comment on alloue l'espace? J'ai pensé:
char *ligne
ligne= malloc(sizeof(char)); // j'alloue une place pour caractère en mémoire (je fais ça pour pouvoir réallouer)
scanf("%s",ligne);
ligne=realloc(ligne,strlen(ligne)*sizeof(char)); //Je réalloue la vrai place en mémoire à la ligne
printf("%s",ligne);
Est-ce que ça va marcher?
En ce moment, j'ai du mal avec les chaines de caractères et l'allocation 😅
Alors dans ce cas de figure, on passera pas un buffer, puis on affectera ce qui a été lu à notre donnée d'arrivée, ceci te donnera les éléments qu'il te manque : ua-cam.com/video/dbUDyMtFFlc/v-deo.html
merci beaucoup pour cette vidéo!
juste une question:
quel est l'intérêt d'utiliser malloc plutot que calloc? vu que calloc initialise à 0, cela rendra toujours le code plus propre non?
En soit (même si minime), l'usage de malloc() est plus rapide que calloc(), c'est au choix 😉
Comment as tu Fait pour avoir cet "émulateur" Sur Windows ? Merci 😊
Quel émulateur ?
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8/
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
Comment as tu eu cette page Pour taper le programme avec mes fonctions qui se mettent en couleurs etc 😊
Ah, c'est l'éditeur de code, là où j'écris mon programme. Tu en as plusieurs que tu peux tester pour trouver celui que tu préfères (Notepad++, Sublime Text, Visual Studio Code, Atom, Brackets, etc.)
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8/
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
D'accord merci beaucoup ça va bien me servir
De rien :), c'est très utile pour rendre son code plus lisible.
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8/
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
mais comment il fait pour récupérer les anciennes données si il change d'adresse ?
//merci pour la video
Quoi donc ?
Super les explications!Merci beaucoup cependant je voulais savoir si y'a des sections dans ta chaine ou tu propose des exercices parce que tu en parle du coup mais je retrouve pas la section .
Tout est là : github.com/jasonchampagne/FormationVideo
@@formation-video merci beaucoup
👋
Salut ! Tout d'abord, merci pour ta vidéo.
J'ai une question et je n'arrive à y répondre. J'ai toujours utilisé malloc exactement comme tu le fais et ça a toujours fonctionné. J'ai été lire de la doc et j'ai appris que malloc renvoyait un pointeur de type void sur le heap (qu'on doit normalement caster dans le bon type) qu'on peut ensuite manipuler à sa guise.
Du coup, je n'arrive pas à saisir pourquoi lorsqu'on manipule les données derrière le pointeur, on a pas besoin de le déréférencer. Ca marche comme une variable classique et ça, j'avoue que ça me trotte.
Est-ce que tu saurais expliquer pourquoi ça fonctionne comme ça ? Je suis persuadé que je n'ai juste pas bien compris quelque chose et que c'est trivial. Mais là, je ne vois pas où je me plante.
Je te remercie pour ton temps et je te souhaite une bonne journée.
Bonjour, la raison est toute simple : c'est le compilateur qui le fait à notre place, d'où le fait de ne pas avoir besoin de déréférencer explicitement notre pointeur 👍
@@formation-video Merci du fond du cœur. 😄
Ça me rendait fou. Et je ne suis jamais tombé précisément sur cette info.
D’ailleurs, j’ai constaté que selon le compilateur (et selon sa version surtout) on peut choisir de le faire, ou non. 🤷♂️
Généralement, on ne le fait pas, et on ne se prend pas la tête. C'est à la charge du compilateur
@@formation-video effectivement. Et ça marche parfaitement comme ça. Merci beaucoup de ton aide. 👍
Salut. Ta vidéo est superbe. J'aurai juste une question
Pourquoi tu as enlevé > après que tu aies initialisé nombreJoueurs à 2 et enlever le scanf ?
J'ai refait cet exemple sur un terminal et ça m'affiche pas d'erreur sans le free mais avec le free si. Donc tu as raison.
Mais je comprends pas enfaite pourquoi on doit enlever le free. Est ce parce qu'on a initialisé ? Car quand on initialise ça alloue un emplacement mais sinon pourquoi enlever le free ? Si c'est le cas pourquoi utiliser malloc si on a pas de free ? Je sais je demande beaucoup ; merci !
Bonsoir, à quel moment de la vidéo exactement ?
Bonsoir c'est encore moi je souhaiterais poser quelques questions au sujet de l'allocation dynamique , dans mon cas precis je veux creer une fonction qui me permettra de diviser ma chaine de caracteres en mots puis stocker ces mots dans un tableau, donc cela veut dire que lorsque je ferai malloc(sizeof(char *) * le_nombre_de_mots) pour les chaines de caracteres (mots de la phrase) du tableau est ce que la machine me reserve une chaine vide de [255] octets directement ? (si c' est le cas est il necessaire de penser a allouer la memoire au nombre de caractere de chaque mots apres avoir alloue la memoire pour mon tableau plus haut? )
Bonsoir, avec ton instruction malloc dans ton commentaire, tu ne ferais qu'allouer l'espace pour le tableau de pointeurs de caractères. Les pointeurs seraient donc alloués, mais pas les mots eux-mêmes.
Donc, il faudra aussi songer à effectuer les allocations pour chaque mot 👍
@@formation-video Merci beaucoup alors
Ok tu pourrais me donner une idée de comment faire cette foncion bon en gros elle prend en paramètre une chaine de caractères et sépare les mots de la chaîne a chaque caractères non alpha numérique et les stockent dans le tableau qu'elle retournera😢
En gros un tuto je suis perdu
Faire un "tuto" sur ça reviendrait à écrire le programme complet, et donc, de donner la solution, ce qui serait totalement contre-productif pour apprendre et assimiler.
Si tu as des difficultés à visualiser comment tu peux écrire ce programme, n'hésite pas à noter et faire des schémas, des illustrations, et te représenter les opérations à réaliser. Ensuite, il suffira de combler cela avec tes connaissances du langage, et s'il t'en manque à te documenter, c'est fait pour ça 👍
Belle video, tres bon son et tres bien explique, mais j'ai quelques questions. Comment alloue-t-on dynamiquement de la memoire sur une chaine de caractere, on doit compter chaque caractere + le caractere de fin de chaine ? Et est-ce que le calloc () initialise egalement les chaines de caractere a { }, ou il ne fonctionne pas sur les chaines de caracteres (surtout en ce qui concerne l'utilisation de cette fonction sur des structures) ?
Merci d'avance !
Bonsoir :).
Pour une chaîne, il faut savoir le nombre de caractères (+ 1 pour le caractère de fin, oui), mais pour cela, il suffit d'utiliser la fonction strlen().
Et pour la fonction calloc() sur une chaîne, ce sera initialisé à "null" (l'équivalent de 0 pour une nombre).
Merci de votre reponse !
De rien :)
Bonsoir , merci encore pour cette vidéo ! Juste quelque chose me perturbe : comment l'ordi sait t il retrouver la bonne adresse avec tableau[i] , sans même savoir si les valeurs font 1,2, ou 4 octets. Et si il le sait , comment ? Merci d'avance
Bonsoir. En mémoire, chaque adresse permet de stocker une donnée sur 8 bits (1 octet). Dans le langage de programmation, chaque type de donnée occupe un espace bien spécifique en mémoire.
Par exemple, le type "int" peut occuper 4 octets (32 bits). C'est-à-dire que l'information sera mémorisée sur 4 adresses.
Dans un tableau, chaque valeur est mémorisée de manière contigüe (à la suite en mémoire). Donc le compilateur fait sans souci les décalages nécessaires pour accéder aux valeurs.
@@formation-video merci pour votre réponse, mais pardon j'ai due mal poser ma question . Je ne parlais pas au niveau du compilateur, mais plutôt au niveau de l'exécution ( si le i est une variable, je suppose que ça n'est pas au compilateur de gérer ?) Comment le processus fait il pour savoir la longueur des valeurs d'un tableau, et donc pour faire le bon décalage ? Voilà plutôt ma question , merci à vous 😀😁
Une fois le programme compilé, c'est du code machine, qui réalise donc les instructions machine adéquates, et les accès en mémoire se font via les adresses. L'ordinateur n'a plus qu'à exécuter les instructions.
bonsoir monsieur vraiment merci pour le soutient, je peut dire que je comprend mieux avec vos explications qu'en classe. mais j'aimerai savoir quel logiciel est plus adapter en language c pour la programation. j'utilise codeblocks mais ça ne fonctionne pas normallement comme je le souhaite.
Bonjour : le logiciel le plus adapté est celui que tu sais utiliser et qui répond aux besoins que tu as. Code::blocks peut être assez "vieillot" et tu pourrais tout à fait opter pour la solution éditeur de code + compilateur.
L'éditeur (VS Code) : ua-cam.com/video/eQUsUq_2AQU/v-deo.html
MinGW (si tu es bien sur Windows) : ua-cam.com/video/y-i96kqT53A/v-deo.html
@@formation-video d'accord merci infiniment
De rien, bonne journée 👋
Bonjour, tout d'abord merci beaucoup pour ces cours de très bonnes qualités !
Je voulais vous poser une question, je pense avoir compris les pointeurs mais je sais jamais quand je dois m'en servir, avez-vous des conseils ?
Les pointeurs sont amenés à être utilisés surtout dans des fonctions quand tu dois travailler sur plusieurs données. Ca permet de ne pas avoir à passer de lourdes structures par exemple, mais simplement le pointeur pour y mener = gain de performances.
Exemple, une fonction qui va afficher les infos du joueur, mieux vaut passer en paramètre simplement un pointeur vers le joueur en question, plutôt que toutes les infos :)
FormationVidéo Assez complexe mais merci pour votre réponse, j'essayerai de creuser un peu plus vers les pointeurs, merci.
De rien :)
comment fais tu pour que sublime text te propose l'autocomplétion quand tu codes ?
C'est une fonctionnalité par défaut de l'éditeur, étant donné que je n'utilise pas d'extension
Bonsoir, j'ai deux questions à vous posez si on décide de faire plusieurs malloc dans des fonctions, les free() on les mets en fin de fonction ou du main ? et est ce qu'on a le droit d'utilisé 2 fois la meme varriable pour faire 2 malloc dans 2 fonction differente ? dans ce cas on devra aussi metre 2 free ?
Bonsoir, tu vas autant d'appels à free() que tu auras fait d'allocations, au risque de te retrouver avec des fuites mémoire, même le programme une fois terminé. Pour la libération de la mémoire (appel à free), il doit être fait au plus tôt, c'est-à-dire quand ton programme n'a plus besoin de la ressource que tu as alloué 👍
@@formation-video D'accors, du coup si je fais un free() dans la fonction ou je fais l'allocation, il y a plus besoin de faire dans le main ? ou bien vaux mieux aussi dans le mais pour plus de sécutité ?
Bah non, c'est une seule fois que tu libères la ressource. De toute manière, si tu fais appel à free() sur une ressource déjà libérée, il ne se passera juste rien
@@formation-video Très bien merci à vous !
👍
j'adore 👍
Tant mieux alors =)
Merci bg
C:\Users\gareth lysander\Desktop\BAIN>gcc main.c -o word
main.c: In function 'main':
main.c:12:14: error: 'nombrejoueurs' undeclared (first use in this function)
scanf("%d", &nombrejoueurs);
^~~~~~~~~~~~~
main.c:12:14: note: each undeclared identifier is reported only once for each function it appears in
C:\Users\gareth lysander\Desktop\BAIN>
bonjour j'ai un problème d'érreur vous pouver m'aidé
C'est clairement indiqué dans l'erreur, ta variable "nombrejoueurs" est non déclarée, elle n'existe pas.
@@formation-video j'ai tapé ce code exactement comme dans la vidéo et j'ai vérifier pour voir si il ni a pas d'érreur je te met le code
#include
#include
int main(void)
{
int nombreJoueurs = 0;
int *liste_joueurs = NULL;
int i;
printf("Combien de joueurs ? ");
scanf("%d", &nombrejoueurs);
liste_joueurs = malloc(sizeof(int) * nombrejoueurs);
if(liste_joueurs == NULL)
exit(1);
for(i = 0 ; i < nombrejoueurs ; i++)
{
printf("joueur %d -> numero %d
", i + 1, i * 3);
liste_joueurs[i] = i * 3;
}
for(i = 0 ; i < nombrejoueurs ; i++)
{
printf ("[%d] " , liste_joueurs[i]);
}
free(liste_joueurs);
return 0;
}
Donc non, tu n'as pas recopié le même code. La variable que tu as déclaré s'appelle "nombreJoueurs" et la variable que tu tentes de passer au scanf() est "nombrejoueurs", ce ne sont donc pas les mêmes.
@@formation-video oui j' ai mis un déclaration avec un majuscule et avec le scanf je les mis en minuscule ils faut que je fasse gaffe avec la déclarations que je met un grand Merci a toi jason
En effet, bonne continuation et bon courage 👋
Bonsoir claire la video comme dab je kif. Dans l'exemple que tu donnes, le programmeur ne sait pas de combien d'espace il aura besoin mais par contre l'utilisateur si (cas des joueurs). Mais en admettant que l'utilisateur lui meme ne sache pas (patr exemple s'il est en train de saisir un texte compter tous les caractères c'est quasi impossible) comment pourrais je faire pour allouer l'espace necessaire exact. Merci d'avance :)
Bonjour, attention, quand je dis que le programme ne sait pas à l'avance combien allouer, l'utilisateur c'est la même chose. Par exemple, toi tu vas vouloir 2 joueurs, mais si un autre utilise le programme, il en voudra peut-être 10. C'est pour cela qu'il faut gérer dynamiquement (malloc/free) l'espace à utiliser en fonction de ce que souhaite l'utilisateur.
Du coup, pour ton problème, celui d'allouer une chaîne de X caractères, il suffit simplement de demander le nombre de caractères voulus, puis de faire un malloc() de X fois le nombre de "char" qu'il faut, et voilà ;)
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+
@@formation-video mais dans le cas ou je sais pas combien de lettres c'est quoi la solution ?
j'ai eu l'idée de faire l'enregistrement du texte caractere par caractere dans un fichier mais c'est pas du tout ideal
C'est pas plûtot exit(0); qu'il faut faire ? Si l'allocation dynamique a échouée
Renvoyer 0 ou quitter en renvoyant un code d'erreur 0 indique en informatique que tout s'est bien passé. Après, c'est une convention, l'important c'est surtout de stopper l'exécution du programme, mais tu peux bien retourner ce que tu veux. Juste qu'il est pensé de base que :
0 -> tout s'est bien passé
autre valeur -> une erreur est survenue
D'accord merci
Je t'en prie :)
@@formation-video Dans ce cas et par simple curiosité (malsaine ?) dans la fonction main pourrait-on replacer le return 0 par un exit(0) et passer main en void ?
Si on utilise le return 0 c'est par convention, restriction langage, vitesse du vent , âge du capitaine... ?
malloc(sizeof(int)*0 ; // memo est reservee ! commemt peut on expliquer ca ?!
Je ne vois pas l'intérêt ici de réserver un espace de 0 octet...c'est issu de quel code ?
@@formation-video aucun interet ! juste un test pour comprendre le mechanisme du systeme d allocation ! avec 0 l allocation est effectuee !
En réalité non. Si tu fais une allocation mémoire d'un espace de 0, la fonction va te retourner NULL ou une adresse unique (non accessible, mais qui sera à libérer), suivant l'implémentation
Salut! En cours nous avions vu qu'il faut caster le malloc ou le calloc en un pointeur d'entier car ces deux fonctions de base retournent des void *
En gros on a ces deux fonctions qui sont construites de cette façon:
void * malloc(taille_octets)
void * calloc(nb_objet , taille_octet)
dans notre cas il faudrait écrire
liste_joueurs = (int *) malloc(nombreJoueurs*sizeof(int))
Dans votre vidéo on voit qu'on a pas besoin de caster, quel est donc l'intérer de la transtypation ici ?
En tout cas, super vidéo très pédagogique :)
Coucou, ce que tu as vu en cours est une grosse erreur, que malheureusement beaucoup d'écoles font.
Je m'explique : à l'époque, on faisait un cast des fonctions comme malloc() car il n'y avait pas de pointeur générique, et qu'en plus le type de retour était différent, du char*
Concernant le langage C, la norme indique que le pointeur générique (void*) prend automatiquement le type de la donnée voulue, donc il est absolument inutile de faire un cast, cela pourrait même entraîner certaines erreurs.
Par contre, si c'était du C++, là il faudrait le faire. C'est aussi pour cela que beaucoup ont pris la mauvaise habitude de le faire également en C. Donc en résumé : ne pas faire de cast en C, seulement pour C++
En gros, caster malloc() en langage C, reviendrait à faire -> int unNombre = (int)15;
bonjour dans cette vidéo je ne comprends si liste joueur est un pointeur ou un tableau je ne sais pas si quelu'un qui passe par la peut m'expliquer merci
Bonjour, la liste de joueurs est un tableau (dont la taille est fixée à l'exécution, pour correspondre au nombre de joueurs demandés par l'utilisateur)
@@formation-video pourquoi alors l'initialise t on avec * et pas [.]
Parce que ce sera un tableau dynamique (dont on ne connaît pas la taille au départ)
@@formation-video OK merci et donc ça m'amene à ma derniere question comment le différencier d'un pointeur quand il est initialisé ?
En fait, quand tu utilises l'étiquette (le nom de ta variable) pour ton tableau, cela se comporte comme un pointeur vers le premier élément de ce dernier. Et de là on retrouve facilement tous les autres car un tableau a toutes ses valeurs qui se suivent en mémoire.
Ici, on ne sait pas la taille de notre tableau donc on déclare un pointeur sur entier. Ensuite, on va allouer un espace pour notre tableau. Ce pointeur va pointer non pas sur un entier isolé, mais un entier qui est le premier élément de notre tableau.
Bonsoir Jason,
ça fait un petit moment. non?
Voilà, apparemment on ne peut utiliser realloc qu'une seule fois. Est-ce le cas ?
Merci pour ta réponse. Bonne continuation.
Bonsoir, comment ça qu'une seule fois ?
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ MERCI DE TON SOUTIEN ! 🔻
◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video
Bonjour Jason,
Oups, je n'ai jamais répondu et, j'avoue, je suis passé à autre chose ^^ . Maintenant j'ai un souci avec malloc
Y a-t-il une limite en octets pour une allocation ? J'essaie de créer un tableau de pixels à partir d'une texture et par la suite des couleurs (SDL_Color couleurs[WIDTH*HEIGHT]) mais on dirait que celui-ci est trop important. Quand je veux afficher le résultat, je vois qu'il a fait le travail en partie. Pourtant, il compile. Est-ce que les erreurs de segmentations ne sont pas censées être signalées à la compilation (gcc) le cas échéant ? Bonne journée.
Salut, et merci une fois de plus tu sauves le mondes amateur et même pro en info; je suis maintenant au niveau des graphes , mais j'ai une question toute bête : s'il vous plait je peux savoir a sert de retourner les nombres, les tableaux ?
Coucou, je n'ai pas bien compris ce que tu cherchais à comprendre
salut excuse je voulais demande a quoi sert de retourner un tableau
Et bien, prends l'exemple d'une fonction qui trierait les éléments d'un tableau dans un ordre. Elle rendrait alors un tableau trié à partir d'un tableau en désordre qu'on lui aurait passé ;)
question:comment le programme fait difference entre un pointeur et un pointeur sur un premier element d'un tableau dans la declaration puisque ils sont déclarés de la meme façon
En fait, pour un tableau, on a un pointeur vers le premier élément de celui-ci. Il n'a donc pas besoin de faire de différence. Écrire par exemple -> int *tab est un pointeur vers un élément de type (int), qui est peut être isolé, ou un élément en première position d'un tableau.
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ MERCI DE TON SOUTIEN ! 🔻
◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video merci pour votre reponse ♥️
17:00 pleonasme!😉
Oui, difficile de terminer avec une première 😂
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🔵 Rejoindre FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
Est-ce que realloc efface les données dans la variable en question ?
En soi, realloc() recopie les données, sauf si le nouvel espace alloué s'en trouve plus petit que l'ancien. Mais généralement, on ré-alloue de l'espace pour en disposer davantage 😉
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
Bonjour j'ai quelques question à poser. Est-il possible d'allouer dynamiquement un espace pour une variable et non pour un pointeur ? Si j'alloue un espace mémoire que je n'attribue à aucun objet ( variables ou tableau ou fonction ), pourrais-je quand même la libérer ( ou alors c'est impossible de faire ça car considéré comme une erreur ou corrigé par le compilateur ) ? Et lorsque j'ai une fuite mémoire, c'est rattrapable Ou C'est vraiment grave ??
Bonjour, en fait un pointeur est une variable, à la différence qu'elle mémorise un adresse, pas une valeur. Pour une variable simple, il n'y a pas besoin d'allouer d'espace car ce sont des types primitifs qui ont déjà leur taille fixe. Ensuite, tu ne peux pas allouer un espace mémoire à rien, cela se fait forcément sur une donnée, et le contraire n'aurait absolument aucun sens.
Enfin, une fuite mémoire n'est pas rattrapable, cela survient quand des ressources allouées n'ont pas été libérées. Même lorsque ton programme se termine, ces ressources sont toujours dans la mémoire, ce qui à terme fait saturer ton système.
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ MERCI DE TON SOUTIEN ! 🔻
◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video merci beaucoup de ces réponses... mais excusez moi, je viens de tester ce code :
#include
#include
int main(void)
{
int *ptr = malloc(sizeof(int));
if(ptr == NULL)
exit(1);
*ptr = 10;
printf("valeur = %d , adresse pointeur = %X, adresse var = %X
", *ptr, &ptr, ptr);
free(ptr);
printf("valeur = %d , adresse pointeur = %X, adresse var = %X
", *ptr, &ptr, ptr);
return 0;
}
et ceci est imprimé :
valeur = 10 , adresse pointeur = 61FF1C, adresse var = 672A20
valeur = 6758728 , adresse pointeur = 61FF1C, adresse var = 672A20
c'est normal que la valeur ait changé et que le reste ait pas changé ? je pensais que vu que je libère la mémoire, alors il n'y a pas d'adresse défini...
Pour avoir un nettoyage au niveau de l'adresse, il faut affecter la valeur NULL au pointeur, donc faire :
free(ptr);
ptr = NULL;
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ MERCI DE TON SOUTIEN ! 🔻
◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video ok merci là je pense avoir tout compris !
OK 👍
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ MERCI DE TON SOUTIEN ! 🔻
◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
◾ Site web : jasonchampagne.fr
◾ Discord : discord.me/jasonchampagne
◾ Twitch : www.twitch.tv/jachampagne
◾ UA-cam (personnel) : ua-cam.com/users/jasonchampagne
◾ Twitter : twitter.com/jachampagne8
◾ Facebook : facebook.com/jachampagne8
◾ Instagram : instagram.com/jachampagne8
◾ Snapchat : www.snapchat.com/add/jachampagne8
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Autre question puis je allouer dans une fonction puis liberer dans une autre fonction, du genre je le fais pas dans la meme fonction
Oui bien sûr, l'objectif dans tous les cas est que ce qui a été alloué est libéré quand on n'en a plus besoin 👍
Bonjour,
merci beaucoup pour tes vidéos, je suis en formation concepteur développeur je ne comprenais pratiquement rien au langage C jusqu'à ce que je tombe sur tes vidéos qui m'ont redonné espoir! J'aurais quelques questions concernant celle-ci:
1) Quand tu utilises le calloc pour la taille ce n'est pas : nombreJoueurs * sizeof(int) ??
2) Pourquoi pour la fonction calloc tu utilises la donnée "nombreJoueurs" et pour la fonction realloc tu utilises la donnée "liste_joueurs"?
3) Il y a aussi une chose que je ne comprends pas quand tu utilises le calloc et le malloc à 16:37! Quand tu utilises le malloc, pour les deux premiers joueurs tu dis que ça met des valeurs par défaut parce qu'il prend des emplacements qui avaient déjà des valeurs dedans! Donc en fait l'allocation dynamique ça permet d'allouer dynamiquement une zone mémoire libre mais pas forcément vide, c'est ça?
Bonsoir :).
1) Non, car autant malloc() ne prend qu'un seul paramètre (la taille en octets que l'on veut allouer), autant calloc() prend les deux paramètres séparément - l'un étant le nombre d'éléments à allouer, l'autre la taille de ces éléments). Pour cela que je fais donc -> *calloc(nombreJoueurs, sizeof(int))*
2) Alors cela vient de la signature des fonctions. Pour malloc()/calloc(), on demande le nombre d'éléments et la taille de chacun d'eux. En revanche, pour la fonction realloc(), on demande directement un pointeur et la taille que l'on va allouer pour cette ré-allocation.
3) Oui voilà, il va te réserver en mémoire des zones qui ne sont pas (ou plus utilisées) ailleurs. Donc ça peut parfois tomber sur des emplacements qui ont déjà servi. D'où la nécessité de les initialiser, ou de leur affecter rapidement des valeurs voulues pour éviter de se retrouver avec n'importe quoi.
Parfait, très clair! Merci beaucoup pour ces précisions :)
De rien ;)
Bonjour, tout d'abord un grand merci pour toutes videos, tu es tres pedagogue et tu as un reel talent pour ca et je t'en remercie. J'ai une petite question lol, si malloc a echoué il faut sortir du programme avec exit(1), or j'ai pu voir sur un cours de openClassRoom qu'il fallait ecrire exit(0) ... et avant de te poser la question je l'ai posé a ChatGPT, qui me dit qu il faut ecrire : exit(EXIT_FAILURE), pourrais tu m'eclairer ? Les 3 solutions sont-elles valables et surtout pourquoi ???? hahaha . Merci encore pour tout ce que tu fais. Cordialement,
Bonjour,
D'abord, tu devrais éviter le cours OpenClassrooms qui n'est clairement plus à jour et bourré d'erreurs signalées maintes fois par des internautes, et non corrigées depuis.
Ensuite, par convention il est d'usage avec les codes de retour, d'utiliser le 0 quand tout s'est bien passé, et toute autre valeur en cas d'erreur. De ce fait, quitter le programme en retournant 0 laisse croire qu'il a quitté sans erreurs. Or si l'appel à malloc() ne parvient pas à allouer de l'espace en mémoire, c'est un cas d'erreur.
Ensuite, EXIT_FAILURE est une constante, c'est aussi valide et utilisable, et cela correspond à...la valeur 0. Cette constante (comme son opposé EXIT_SUCCESS) fait partie de l'entête stdlib.h
Donc, tu peux au choix utiliser une valeur numérique comme 0, ou la constante EXIT_FAILURE 👍
@@formation-video Ok c'est noté, merci beaucoup pour ta reponse.
👋
Bonsoir j'espère que vous allez bien
J'ai des difficultés avec l allocation dynamique au niveau de la syntaxes en effet lorsque j écrit int *tab et que j j'utilise malloc pour l'allocation dynamique un message d erreur s'affiche (assigning to 'int *' from incompatible Type 'void *') je ne comprend pas merci de me répondre car ce problème me bloque dans mon apprentissage de langage c
Bonsoir, quel est ton code ?
@@formation-video j'ai fait comme dans la vidéo
Si c'était le cas, cela fonctionnerait
@@formation-video ok voici la syntaxes :
#include
#include
int main ()
{
int notes;
int *tab= NULL;
int i;
printf ("combien de notes avez vous ?
");
scanf ("%d",¬es);
tab = malloc(notes * sizeof(int));
if (tab==NULL)
{
exit(1);
}
for (i=0; i
OK, alors cela vient de ton affichage, tu as un "&" de trop dans ton printf(). Aussi, tu as oublié le "void" dans les parenthèses de la fonction main() - un code corrigé : pastebin.com/KUxEcNga
super video merci beaucoup ! 🐐
je voulais savoir que si on ne sait pas combien de joueur vont rejoindre la partie( c a d combien ajouter au realoc) est ce qu on peu maloc le realoc
je sais pas trop si tu a compris ce que je voulais dire c dit un peu bizarrement mais voila
Oui, realloc() sert à cela, si tu dois ajouter un nouveau joueur en cours de partie alors que tu as déjà alloué l'espace il suffit de réallouer avec un espace plus grand et suffisant pour accueillir le nouveau 👍
Bonne vidéo! Juste une précision : sizeof n'est pas une fonction, mais un opérateur. Une fonction ne pourrait pas prendre en paramètre un type. Aussi, contrairement aux fonctions, la valeur de sizeof est évaluée au stade de compilation (à moins qu'on l'utilise sur un tableau dynamique depuis C99).
Oui, c'est bien un opérateur 👍
Salut est ce que je peux utiliser malloc pour des tableaux a 2 dimmension?
Si oui comment ?
Bonsoir. Oui tu peux, en allouant d'abord le nombre de lignes du tableau, et pour chaque ligne, le nombre de colonnes, pour avoir tes 2 dimensions. Il faudra donc utiliser des boucles, et bien penser à libérer la mémoire aussi avec des free(), en usant d'une boucle également bien sûr.
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- Jason CHAMPAGNE - jasonchampagne.fr
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- COUCOU, TU VEUX :
|--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
|--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
|--- T'abonner à mon autre chaîne UA-cam ? ua-cam.com/users/jasonchampagne
|--- Me follow sur Twitter ? twitter.com/jachampagne8
|--- Liker la page Facebook ? facebook.com/jachampagne8
|--- Me follow sur Insta ? instagram.com/jachampagne8
|--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
+---------------------------------------------------------------------------------------------------------------------------------------------+