Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5969 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Newbie : 2 questions (structures et getch() ) : Merci :)

n°357499
Tomate
Posté le 10-04-2003 à 10:59:01  profilanswer
 

Reprise du message précédent :

polo021 a écrit :

vous pourriez me dire pourquoi c'est pas bien les casting sur malloc?
 
et le sizeof (int) si je le mets pas c'est a cause du casting (il en deduit lui meme que c'est de l'entier).
 
PS : je n'ai pas teste mais simplement tape ca comme ca en 2 minutes mais je vois pas pourquoi le free planterai???  :??:  


on ne caste jamais malloc car ca renvoie un void * ;)
 
et 10 ca marche ;)


---------------
:: Light is Right ::
mood
Publicité
Posté le 10-04-2003 à 10:59:01  profilanswer
 

n°357501
VisualC++
J'va y penser ...
Posté le 10-04-2003 à 10:59:39  profilanswer
 

polo21 >  
Sans m'avancer, malloc ca alloue qu'un bloc memoire de xx octets, il s'en fou de savoir ce que c'est  
Pkoi le sizeof, ben tu alloue un bloc d'octets, sauf que un INT c pas sur 1 octet, un char oui (mais c pas une generalite)
Pour le cast, euh la je sais pas pkoi, moi je le fait lol, comme pour un new.
Le (int*)malloc(taille * sizeof(int)) qui plante au free j'ai un doute, sauf pe si avant on va taper plus loin que la memoire allouee.

n°357502
ToxicAveng​er
Posté le 10-04-2003 à 10:59:45  profilanswer
 

polo021 a écrit :

vous pourriez me dire pourquoi c'est pas bien les casting sur malloc?
 
et le sizeof (int) si je le mets pas c'est a cause du casting (il en deduit lui meme que c'est de l'entier).
 
PS : je n'ai pas teste mais simplement tape ca comme ca en 2 minutes mais je vois pas pourquoi le free planterai???  :??:  


 

12.1 Doit-on ou ne doit-on pas caster malloc() ?
Cette question est probablement celle qui revient le plus souvent dans la discussion. Et à chaque fois, elle engendre une longue discussion.  
Certains intervenants pensent que caster la valeur de retour de malloc() est inutile, voire dangereux. En effet, malloc() renvoie un void *. Or, en C, un pointeur void * est implicitement casté lors d'une affectation vers le type de la variable affectée. Bien sûr, expliciter le cast n'est pas interdit, et est parfois utile. Toutefois, caster le retour de malloc() risque de cacher au compilateur l'oubli du prototype de malloc(). Ce prototype se trouve dans le fichier d'en-tête <stdlib.h>. Sans lui, malloc() sera par défaut une fonction retournant un int et dont les paramètres seront du type des arguments passés, ce qui peut provoquer de sérieux bugs.  
 
La véritable erreur est l'oubli du fichier d'en-tête <stdlib.h>, et non pas le cast de malloc() en lui même. Mais le cast de malloc() risque de cacher au compilateur cette erreur. À noter qu'il existe des outils de vérification de code et des options sur la plupart des compilateurs4 qui permettent de détecter ce genre d'erreur.  
 
D'autres intervenants jugent qu'il faille tout de même caster le retour de malloc(), afin de conserver une compatibilité avec d'anciens compilateurs pré-ANSI, ou pour intégrer plus facilement le code avec C++. Evidemment, les programmeurs avertis sauront dans quelles situations il est utile ou non de caster les void *.  
 

n°357506
Tomate
Posté le 10-04-2003 à 11:01:28  profilanswer
 

ToxicAvenger a écrit :


 

12.1 Doit-on ou ne doit-on pas caster malloc() ?
Cette question est probablement celle qui revient le plus souvent dans la discussion. Et à chaque fois, elle engendre une longue discussion.  
Certains intervenants pensent que caster la valeur de retour de malloc() est inutile, voire dangereux. En effet, malloc() renvoie un void *. Or, en C, un pointeur void * est implicitement casté lors d'une affectation vers le type de la variable affectée. Bien sûr, expliciter le cast n'est pas interdit, et est parfois utile. Toutefois, caster le retour de malloc() risque de cacher au compilateur l'oubli du prototype de malloc(). Ce prototype se trouve dans le fichier d'en-tête <stdlib.h>. Sans lui, malloc() sera par défaut une fonction retournant un int et dont les paramètres seront du type des arguments passés, ce qui peut provoquer de sérieux bugs.  
 
La véritable erreur est l'oubli du fichier d'en-tête <stdlib.h>, et non pas le cast de malloc() en lui même. Mais le cast de malloc() risque de cacher au compilateur cette erreur. À noter qu'il existe des outils de vérification de code et des options sur la plupart des compilateurs4 qui permettent de détecter ce genre d'erreur.  
 
D'autres intervenants jugent qu'il faille tout de même caster le retour de malloc(), afin de conserver une compatibilité avec d'anciens compilateurs pré-ANSI, ou pour intégrer plus facilement le code avec C++. Evidemment, les programmeurs avertis sauront dans quelles situations il est utile ou non de caster les void *.  
 



:jap:  
 
mais la l inculde etait fait ;)


---------------
:: Light is Right ::
n°357512
polo021
Posté le 10-04-2003 à 11:09:04  profilanswer
 

Code :
  1. char *temp = malloc(4096*sizeof(char));


error C2440: '=' : cannot convert from 'void *' to 'char *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
 :pt1cable:
 
EDIT : mon compilateur m'oblige tout simplement a caster, que je le veuille ou pas d'ailleurs...


Message édité par polo021 le 10-04-2003 à 11:09:51
n°357515
Tomate
Posté le 10-04-2003 à 11:10:01  profilanswer
 

polo021 a écrit :

Code :
  1. char *temp = malloc(4096*sizeof(char));


error C2440: '=' : cannot convert from 'void *' to 'char *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
 :pt1cable:  


kel os ?
si linux/unix, kelle version de gcc ?


---------------
:: Light is Right ::
n°357521
polo021
Posté le 10-04-2003 à 11:13:53  profilanswer
 

tomate77 a écrit :


kel os ?
si linux/unix, kelle version de gcc ?


 
windows 2000 pro et Microsoft eMbedded Visual Tools 3.0


Message édité par polo021 le 10-04-2003 à 11:14:26
n°357525
Tomate
Posté le 10-04-2003 à 11:17:15  profilanswer
 

polo021 a écrit :


 
windows 2000 pro et Microsoft eMbedded Visual Tools 3.0


ok cherche po plus loin, il n est pas C compliant :D
 
ps : remarque, on s en doutait, windows ne respecte jamais les normes :pfff:


Message édité par Tomate le 10-04-2003 à 11:17:39

---------------
:: Light is Right ::
n°357547
theShockWa​ve
I work at a firm named Koslow
Posté le 10-04-2003 à 11:30:38  profilanswer
 

polo021 a écrit :

Code :
  1. char *temp = malloc(4096*sizeof(char));


error C2440: '=' : cannot convert from 'void *' to 'char *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
 :pt1cable:
 
EDIT : mon compilateur m'oblige tout simplement a caster, que je le veuille ou pas d'ailleurs...


 
C'est parce que tu veux faire du C dans un fichier .cpp ...
 
Si tu renommes ton fichier en .c, tu ne devrais plus avoir ce problème ...

n°357558
ToxicAveng​er
Posté le 10-04-2003 à 11:34:47  profilanswer
 

theShOcKwAvE a écrit :


 
C'est parce que tu veux faire du C dans un fichier .cpp ...
 
Si tu renommes ton fichier en .c, tu ne devrais plus avoir ce problème ...


 
ouais, en c++ le cast est obligatoire. Par contre Visual Studio gère différement les .cpp et les .c

mood
Publicité
Posté le 10-04-2003 à 11:34:47  profilanswer
 

n°357565
theShockWa​ve
I work at a firm named Koslow
Posté le 10-04-2003 à 11:38:28  profilanswer
 

tomate77 a écrit :


ok cherche po plus loin, il n est pas C compliant :D
 
ps : remarque, on s en doutait, windows ne respecte jamais les normes :pfff:  


Il respecte les normes du C++ pour les fichiers dont l'extension est .cpp ... Il respecte les normes du C quand l'extension du fichier est .c ... Il suffit de savoir ce qu'on veut ...

n°357567
Tomate
Posté le 10-04-2003 à 11:38:55  profilanswer
 

theShOcKwAvE a écrit :


Il respecte les normes du C++ pour les fichiers dont l'extension est .cpp ... Il respecte les normes du C quand l'extension du fichier est .c ... Il suffit de savoir ce qu'on veut ...

:jap:
 
comme bcp (tous ?) les compilos C/C++


Message édité par Tomate le 10-04-2003 à 11:39:17

---------------
:: Light is Right ::
n°357578
polo021
Posté le 10-04-2003 à 11:45:50  profilanswer
 

theShOcKwAvE a écrit :


 
C'est parce que tu veux faire du C dans un fichier .cpp ...
 
Si tu renommes ton fichier en .c, tu ne devrais plus avoir ce problème ...


 
exact. mais MFC => *.cpp
donc ce sera char* temp = (char*)malloc(4096*sizeof(char));
 
[:spamafote]

n°357580
Tetragramm​aton IHVH
dieu unique =&gt; pensée unique
Posté le 10-04-2003 à 11:47:04  profilanswer
 

polo021 a écrit :


 
exact. mais MFC => *.cpp
donc ce sera char* temp = (char*)malloc(4096*sizeof(char));
 
[:spamafote]


 
de toute façon, si tu fais du C++, t'as pas besoin de malloc...


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°357589
polo021
Posté le 10-04-2003 à 11:52:03  profilanswer
 

Tetragrammaton IHVH a écrit :


 
de toute façon, si tu fais du C++, t'as pas besoin de malloc...  


 
je fais que du C, j'y connais (presque) rien en C++
 

n°357605
ToxicAveng​er
Posté le 10-04-2003 à 11:57:22  profilanswer
 

polo021 a écrit :


 
je fais que du C, j'y connais (presque) rien en C++
 
 


 
MFC --> MS Foundation Classes -> c'est du C++ coco.
 
Bien sur, on peut programmer (mal) en C++ pour imiter le C, mais bon...

n°357609
Tetragramm​aton IHVH
dieu unique =&gt; pensée unique
Posté le 10-04-2003 à 11:59:42  profilanswer
 

ToxicAvenger a écrit :


 
MFC --> MS Foundation Classes -> c'est du C++ coco.
 
Bien sur, on peut programmer (mal) en C++ pour imiter le C, mais bon...


 
 :jap:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°357640
Tomate
Posté le 10-04-2003 à 12:42:55  profilanswer
 

ToxicAvenger a écrit :


 
MFC --> MS Foundation Classes -> c'est du C++ coco.
 
Bien sur, on peut programmer (mal) en C++ pour imiter le C, mais bon...


on peut aussi imiter le C++ en C ;)


---------------
:: Light is Right ::
n°357651
polo021
Posté le 10-04-2003 à 13:20:37  profilanswer
 

tomate77 a écrit :


on peut aussi imiter le C++ en C ;)


 
 
oui c'est ce que je fais. Mon projet est en MFC => c++, mais je code en C.
 
Y a pas de probleme a ca je pense, non  :heink: ?

n°357655
VisualC++
J'va y penser ...
Posté le 10-04-2003 à 13:24:33  profilanswer
 

A part que c crade   :pfff:  :whistle:  
 
 :hello:

n°357657
Tomate
Posté le 10-04-2003 à 13:25:42  profilanswer
 

VisualC++ a écrit :

A part que c crade   :pfff:  :whistle:  
 
 :hello:  

:D


---------------
:: Light is Right ::
n°357665
polo021
Posté le 10-04-2003 à 13:32:07  profilanswer
 

je vais pas commencer a coder en c++ alors que le C est tres bien pour ca et que je ne connais pas le c++ en plus.
[:spamafote]
 
EDIT : enfin bon, on va pas s'eterniser non plus...


Message édité par polo021 le 10-04-2003 à 13:34:03
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Questions sur les fichiers ....[PHP] Questions pour cookies
[Resolu (Merci MagicBuzz)] Problème pour lire un flux de byte en C#renseignement merci
Question mysql pour un débutant... RESOLU grace a Mr yvele Merciasp.net pour un newbie
comment effectuer le contrôle du type d'un champ en temps réel ? merciquestions php/mysql :p
[javascript] [newbie inside] redirection si netscape ?mysql : quelques questions
Plus de sujets relatifs à : Newbie : 2 questions (structures et getch() ) : Merci :)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)