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

  FORUM HardWare.fr
  Programmation
  C++

  Malloc sous Windows

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Malloc sous Windows

n°274754
MrTonio
Posté le 22-12-2002 à 16:49:48  profilanswer
 

Salut,
 
je voudrais savoir si il y a une difference entre le malloc/calloc d unix avec celui de windows :??:
 
aske win me pete une vieille erreur et ca me soul grave :cry:
 
pour info, je developpe sous .Net


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
mood
Publicité
Posté le 22-12-2002 à 16:49:48  profilanswer
 

n°274756
Carbon_14
Posté le 22-12-2002 à 17:01:04  profilanswer
 

Sous Windows "classique", ça marche très bien..
 
Un bout de code jeté par .NET ? La vieille erreur, which is it ?

n°274763
MrTonio
Posté le 22-12-2002 à 17:15:27  profilanswer
 

Code :
  1. typedef struct bl_s
  2. {
  3.   int  type;
  4.   char  *name;
  5.   char  *alias;
  6.   gtk_t  *online;
  7.   gtk_t  *offline;
  8.   gtk_t  *grp;
  9.   gtk_t  *multi;
  10.   info_t *info;
  11.   int  total;
  12.   int  count;
  13.   int  expand;
  14.   struct bl_s *parent;
  15.   struct bl_s *sub;
  16.   struct bl_s *next;
  17. }  bl_t;
  18. typedef struct ns_s
  19. {
  20.   FILE  *fs;
  21.   int  sock;
  22.   char  *homedir;
  23.   char  *name;
  24.   bl_t  *bl;
  25.   pixmap_t *pixmap;
  26.   win_t  *win;
  27.   gtk_t  *offline;
  28.   conf_t *conf;
  29. }  ns_t;
  30. static int expand = -1;
  31. static bl_t *gl_current = NULL;
  32. bl_t *put_in_grp_list(bl_t **list, char *name)
  33. {
  34.   bl_t *newe;
  35.   newe = (bl_t *)calloc(1, sizeof(*newe));
  36.   newe->type = BL_TYPE_GROUP; // ca plante ici
  37.   newe->name = name ? name : strdup("Nononyme Group" );
  38.   newe->next = *list;
  39.   newe->expand = expand < 0 ? (gl_opt & OPT_EXPAND_GRP) : expand;
  40.   *list = newe;
  41.   expand = -1;
  42.   return (newe);
  43. }
  44. bl_t *put_in_bdy_list(bl_t **list, char *name, char *alias)
  45. {
  46.   bl_t *newe;
  47.   newe = (bl_t *)calloc(1, sizeof(*newe));
  48.   newe->type = BL_TYPE_BUDDY;
  49.   newe->name = name;
  50.   newe->parent = gl_current;
  51.   gl_current->total++;
  52.   newe->alias = alias ? alias : name;
  53.   newe->next = *list;
  54.   newe->sub = NULL;
  55.   newe->count = 0;
  56.   newe->expand = expand < 0 ? 0 : expand;
  57.   *list = newe;
  58.   expand = -1;
  59.   return (newe);
  60. }
  61. void add_manually(ns_t *ns)
  62. {
  63. gl_current = put_in_grp_list(&(ns->bl), "Astek" );
  64. put_in_bdy_list(&(gl_current->sub), "lamira_p", NULL);
  65. gl_current = put_in_grp_list(&(ns->bl), "Potes" );
  66. put_in_bdy_list(&(gl_current->sub), "paille_v", "Vince" );
  67. put_in_bdy_list(&(gl_current->sub), "le-gac_l", "LoLoVTS" );
  68. put_in_bdy_list(&(gl_current->sub), "rapill_y", "Y@nnou" );
  69. put_in_bdy_list(&(gl_current->sub), "fronti_d", "Fronda" );
  70. put_in_bdy_list(&(gl_current->sub), "mettre_m", "MnMs" );
  71. put_in_bdy_list(&(gl_current->sub), "mathis_j", "Julien" );
  72. put_in_bdy_list(&(gl_current->sub), "herrer_a", "Anto" );
  73. gl_current = put_in_grp_list(&(ns->bl), "Tek3" );
  74. put_in_bdy_list(&(gl_current->sub), "vallet_m", "PinGoiN" );
  75. put_in_bdy_list(&(gl_current->sub), "de-ger_a", "GuGus" );
  76. put_in_bdy_list(&(gl_current->sub), "voisin_m", NULL);
  77. put_in_bdy_list(&(gl_current->sub), "larrer_a", NULL);
  78. put_in_bdy_list(&(gl_current->sub), "caraco_y", NULL);
  79. }
  80. int main(int argc, char **argv)
  81. {
  82.   ns_t *ns;
  83.  
  84.   ns = (ns_t *)malloc(sizeof(*ns));
  85.   ns->bl = NULL;
  86.   gl_opt = 0;
  87.   ns->homedir = strdup("test" );
  88.   ns->name = strdup("test" );
  89.   ns->sock = 0;
  90.   ns->conf = init_conf();
  91.   add_manually(ns);
  92.   watch_log(ns->sock, ns->bl);
  93.   user_data(ns->sock, ns->conf->user_data);
  94.   gtk_init(&argc, &argv);
  95.   create_window(ns);
  96.   gdk_input_add(ns->sock, GDK_INPUT_READ, gere_cmd, (gpointer)ns);
  97.   gtk_timeout_add(1000 * 60, request_ping, (gpointer)(ns->sock));
  98.   update_contact_list(ns->sock, ns->bl);
  99.   gtk_main();
  100.   return (0);
  101. }


 
walla le "chti" bou de code ki plante
 
en gros j ai l erreur au moment ou je veux acceder a ma structure allouée
mais le pire c ke avec un malloc ca passe, mais je peux plus lire dans la structure
donc pour resumer :  
calloc -> ecriture impossible
malloc -> lecture impossible


Message édité par MrTonio le 22-12-2002 à 17:18:17

---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
n°274764
verdoux
And I'm still waiting
Posté le 22-12-2002 à 17:18:30  profilanswer
 

Ben ton code plantera aussi sous unix :D

n°274766
MrTonio
Posté le 22-12-2002 à 17:20:23  profilanswer
 

verdoux a écrit :

Ben ton code plantera aussi sous unix :D


 
na  :kaola:  
ca marche !!!!!
et meme tres bien !!!
mais a force de bidouiller pour le faire marcher sous ouindows, j ai pu faire des conneries ....


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
n°274767
youdontcar​e
Posté le 22-12-2002 à 17:26:41  profilanswer
 

MrTonio a écrit :

ns = (ns_t *)malloc(sizeof(*ns));

vers quoi pointe ns ? vers *boum*.
 
sizeof(ns_t)


Message édité par youdontcare le 22-12-2002 à 17:28:19
n°274768
verdoux
And I'm still waiting
Posté le 22-12-2002 à 17:27:56  profilanswer
 

Ca veut dire quoi que tu développes sous .NET ?
Tu utilises VC .NET ? Quel type de projet as tu choisi ?

n°274769
MrTonio
Posté le 22-12-2002 à 17:30:04  profilanswer
 

youdontcare a écrit :

vers quoi pointe ns ? vers *boum*.
 
sizeof(ns_t)


 
sizeof(*ns) ca veut dire la meme chose ke sizeof(ns_t)  :sol:


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
n°274770
MrTonio
Posté le 22-12-2002 à 17:30:42  profilanswer
 

verdoux a écrit :

Ca veut dire quoi que tu développes sous .NET ?
Tu utilises VC .NET ? Quel type de projet as tu choisi ?


ouaip c VC.Net j ai choisit un projet C++ vide et j ai changé la compilation en C


Message édité par MrTonio le 22-12-2002 à 17:31:01

---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
n°274772
Carbon_14
Posté le 22-12-2002 à 17:52:12  profilanswer
 

Y a fallu bidouiller quoi pour que ça "marche" (passe) sous Windows ?

mood
Publicité
Posté le 22-12-2002 à 17:52:12  profilanswer
 

n°274773
MrTonio
Posté le 22-12-2002 à 17:56:08  profilanswer
 

carbon_14 a écrit :

Y a fallu bidouiller quoi pour que ça "marche" (passe) sous Windows ?


 
bah en fait a la base, le bout de code ke j essaye de faire maecher, était remplacé par du Lex/Yacc sous unix.
 
Mais sinon j ai pas changé grand chose : les cast du malloc et calloc, changement de nom de variable ....


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
n°274775
youdontcar​e
Posté le 22-12-2002 à 18:01:18  profilanswer
 

MrTonio a écrit :

sizeof(*ns) ca veut dire la meme chose ke sizeof(ns_t)  :sol:

c'est vrai que sizeof() est résolu à la compilation. ça ne m'empêche pas de trouver ça pas propre. si le reste du code est du même tonneau, ... :D

n°274778
MrTonio
Posté le 22-12-2002 à 18:05:05  profilanswer
 

youdontcare a écrit :

c'est vrai que sizeof() est résolu à la compilation. ça ne m'empêche pas de trouver ça pas propre. si le reste du code est du même tonneau, ... :D


 
argumente au lieu de critiquer  :kaola:  
imagine je decide de changer le type ns_t en machin_t, et ben faudra ke je remplace tout les sizeof(ns_t) alors ke sizeof(*ns) marche tout les temps  :ange:  
 
j aimerais bien voir comment tu code toa !


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
n°274783
youdontcar​e
Posté le 22-12-2002 à 18:18:31  profilanswer
 

>> argumente au lieu de critiquer  :kaola:  
 
déjà dit, suivi de pointeur non initialisé. c'est dans un sizeof() donc pas de problème, c'est 'juste' une réaction allergique. et surtout, voir dernier point.
 
pour continuer dans le 'pas propre', regarde comment tu mélanges chaînes statiques et chaînes allouées.  
 
>> imagine je decide de changer le type ns_t en machin_t, et ben faudra ke je remplace tout les sizeof(ns_t) alors ke sizeof(*ns) marche tout les temps  :ange:  
 
moui, et tu ne vas pas changer le nom de la variable ns ?  
 
>> j aimerais bien voir comment tu code toa !
 
avec des new ;) quand je faisais des malloc, j'utilisais toujours le nom de la structure allouée dans le sizeof() : un coup d'oeil rapide suffit à voir ce qu'on alloue.

n°274787
MrTonio
Posté le 22-12-2002 à 18:24:02  profilanswer
 

youdontcare a écrit :


 
pour continuer dans le 'pas propre', regarde comment tu mélanges chaînes statiques et chaînes allouées.  
 


 
pour ca je suis d accord avec toa mais c a cause des modifs a la con pour essayer de faire marcher ce ù^µ%£^*$^ù¨¨%µ de code sous ouindoz


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
n°274821
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 22-12-2002 à 18:55:02  profilanswer
 

tu ferais mieux de regarder les codes de retour de malloc et inclure mmloc.h ou stdlib.h
 
au fait: sizeof est un opérateur, pas une fonction
 
sizeof(type) mais sizeof objet


---------------
du bon usage de rand [C] / [C++]
n°275660
Giz
Posté le 25-12-2002 à 01:03:03  profilanswer
 

MrTonio a écrit :

Code :
  1. int main(int argc, char **argv)
  2. {
  3.   ns_t *ns;
  4.  
  5.   ns = (ns_t *)malloc(sizeof(*ns));
  6.   ns->bl = NULL;
  7.   gl_opt = 0;
  8.   ns->homedir = strdup("test" );
  9.   ns->name = strdup("test" );
  10.   ns->sock = 0;
  11.   ns->conf = init_conf();
  12.   add_manually(ns);
  13.   watch_log(ns->sock, ns->bl);
  14.   user_data(ns->sock, ns->conf->user_data);
  15.   gtk_init(&argc, &argv);
  16.   create_window(ns);
  17.   gdk_input_add(ns->sock, GDK_INPUT_READ, gere_cmd, (gpointer)ns);
  18.   gtk_timeout_add(1000 * 60, request_ping, (gpointer)(ns->sock));
  19.   update_contact_list(ns->sock, ns->bl);
  20.   gtk_main();
  21.   return (0);
  22. }


 
walla le "chti" bou de code ki plante
 
en gros j ai l erreur au moment ou je veux acceder a ma structure allouée
mais le pire c ke avec un malloc ca passe, mais je peux plus lire dans la structure
donc pour resumer :  
calloc -> ecriture impossible
malloc -> lecture impossible


 
 :non:  :non:  
Erreur !!
 
Sans lire koi que ce soi de ton code, ta fonction malloc est mal utilisée !!
 
REGLE D'OR : (notre prof de C nous la dit y'a a peine 15j :D)
 
Koi k'il arrive: par exemple:
int *a;
a = (int*)malloc(sizeof(int))
Le paramètre de sizeof DOIT TOUJOURS ETRE DEFERENCER une fois de plus que 'a' (=variable qui prend le retour de la fonction cad un int*)...dc comme 'a' est un int* sizeof aura pour paramètre int et pas int*  :non:  
Mais bon toi je vois que ta mis *ns : meme si c pas tout a fait de cette erreur qu'il s'agit, je ne vois pas en koi tu mets en nom de variable en argument au lieu d'un type de donnée !  :??:  
 
la regle d'or se comprend très bien du fait que un int* (comme a ds mon exemple) pointe sur le début d'une zone mémoire allouer de taille d'un int (logique car a doit pointer sur une zone de la taille d'un int) voilà...ceci dit, je ne c pas si c du C ou C++ que tu fais mais sache que les fonctions delete/new du C++ st davantage conseillées (si tu n'é pa en pure C ;)) !

n°275663
HelloWorld
Salut tout le monde!
Posté le 25-12-2002 à 02:00:25  profilanswer
 

s'il te dit que la memoire ne peut etre read, c'est que ton pointeur est mauvais.
Test ce que te renvoit calloc et malloc.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°275707
MrTonio
Posté le 25-12-2002 à 14:35:23  profilanswer
 

Giz a écrit :


 
 :non:  :non:  
Erreur !!
 
Sans lire koi que ce soi de ton code, ta fonction malloc est mal utilisée !!
 


 
ah ouais ???? bah dis moa ou alors :??:
moa je vois rien de mal dans ce ke j ai fait ... alors c toi ki comprend po comment ca marche :sarcastic:
 
nan mais de toute facon j ai trouvé d ou ca venait ... et ct pas le bout de code ke j ai montré :D
en fait ca devait venir des options de compilation de VS.Net et du coup ca fesait tout péter ... :/


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Malloc sous Windows

 

Sujets relatifs
fichiers bat et windows xpComment faire un Drag&Drop vers Windows ?
[VB] Keyascii, language windows, language du clavierComment récupérer la liste des utilisateurs d'un domaine Windows ?
[Programmation Windows] GetSystemMetrics ! Metrics qui foirent !DLL Windows VC++
[API Windows] Pourquoi cette foultitude dans les types ?Perl sous Windows
Existe t-il une version de PostGreSQL pour Windows ???Quel environment pour utiliser GCC sous Windows?
Plus de sujets relatifs à : Malloc sous Windows


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR