Ici aucune mémoire n'a été allouée aux pointeurs input et output donc l'appel à mafonction va déréférencer un pointeur NULL ce qui va engendrer un comportement non-défini, ce qui est à-peu-près passible de la peine capitale pour un programmeur C.
(Là je suis sympa, il me semble que Linux est pas trop méchant et plante le programme direct quand le pointeur est NULL, par contre si le pointeur n'avait pas été initialisé du tout, c'était des feux d'artifice)
Tu peux décider d'utiliser de la mémoire sur la pile pour appeler ta fonction:
Ici, on a bien de la mémoire pour l'input et l'output (mémoire de la pile), mais l'appel à mafonction va engendrer la lecture du tableau input qui n'a pas été initialisé, ce qui va provoquer un comportement non-défini, ce qui est à-peu-près passible de la peine capitale pour un programmeur C.
Tu peux corriger en initialisant les données lues :
Là, c'est bien on a initialisé les données, mais on a dépassé la taille du tableau input, et on commence à lire et à écrire des données en débordant du tableau , ce qui va provoquer un comportement non-défini, ce qui est à-peu-près passible de la peine capitale pour un programmeur C.
On peut s'en sortir en contraignant la taille de ton tableau de sortie.
intmain(){intinput[]={0,1,42};intoutput[sizeof(input)/sizeof(int)];//does C11+ have constexpr?mafonction(output,input,sizeof(input)/sizeof(int);}
Tu peux aussi décider d'allouer un tableau sur le tas et bien penser à initialiser les données et tout et tout.
Mais on aura oublié d'invoquer free afin de libérer la mémoire allouée pour input et output, créant une fuite de mémoire qui est à-peu-près passible de la peine capitale pour un programmeur C.
C'est le côté fun du C, on donne au programmeur une infinité d'opportunités de se prendre les pieds dans le tapis.
# 'pouvez répéter la questioooon ?
Posté par nazcafan . En réponse au message Sécurité lors de la déclaration d'un pointeur. Évalué à 3. Dernière modification le 08 novembre 2019 à 18:17.
un pointeur en soi ne réserve pas de mémoire :
Ici aucune mémoire n'a été allouée aux pointeurs
inputetoutputdonc l'appel àmafonctionva déréférencer un pointeurNULLce qui va engendrer un comportement non-défini, ce qui est à-peu-près passible de la peine capitale pour un programmeur C.(Là je suis sympa, il me semble que Linux est pas trop méchant et plante le programme direct quand le pointeur est
NULL, par contre si le pointeur n'avait pas été initialisé du tout, c'était des feux d'artifice)Tu peux décider d'utiliser de la mémoire sur la pile pour appeler ta fonction:
Ici, on a bien de la mémoire pour l'input et l'output (mémoire de la pile), mais l'appel à
mafonctionva engendrer la lecture du tableauinputqui n'a pas été initialisé, ce qui va provoquer un comportement non-défini, ce qui est à-peu-près passible de la peine capitale pour un programmeur C.Tu peux corriger en initialisant les données lues :
Là, c'est bien on a initialisé les données, mais on a dépassé la taille du tableau
input, et on commence à lire et à écrire des données en débordant du tableau , ce qui va provoquer un comportement non-défini, ce qui est à-peu-près passible de la peine capitale pour un programmeur C.On peut s'en sortir en contraignant la taille de ton tableau de sortie.
Tu peux aussi décider d'allouer un tableau sur le tas et bien penser à initialiser les données et tout et tout.
Mais on aura oublié d'invoquer
freeafin de libérer la mémoire allouée pourinputetoutput, créant une fuite de mémoire qui est à-peu-près passible de la peine capitale pour un programmeur C.C'est le côté fun du C, on donne au programmeur une infinité d'opportunités de se prendre les pieds dans le tapis.
Bon 'dredi !