Malloc sous Windows

Malloc sous Windows - C++ - Programmation

Marsh Posté le 22-12-2002 à 16:49:48    

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/
Reply

Marsh Posté le 22-12-2002 à 16:49:48   

Reply

Marsh Posté le 22-12-2002 à 17:01:04    

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

Reply

Marsh Posté le 22-12-2002 à 17:15:27    

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/
Reply

Marsh Posté le 22-12-2002 à 17:18:30    

Ben ton code plantera aussi sous unix :D

Reply

Marsh Posté le 22-12-2002 à 17:20:23    

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/
Reply

Marsh Posté le 22-12-2002 à 17:26:41    

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
Reply

Marsh Posté le 22-12-2002 à 17:27:56    

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

Reply

Marsh Posté le 22-12-2002 à 17:30:04    

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/
Reply

Marsh Posté le 22-12-2002 à 17:30:42    

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/
Reply

Marsh Posté le 22-12-2002 à 17:52:12    

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

Reply

Marsh Posté le 22-12-2002 à 17:52:12   

Reply

Marsh Posté le 22-12-2002 à 17:56:08    

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/
Reply

Marsh Posté le 22-12-2002 à 18:01:18    

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

Reply

Marsh Posté le 22-12-2002 à 18:05:05    

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/
Reply

Marsh Posté le 22-12-2002 à 18:18:31    

>> 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.

Reply

Marsh Posté le 22-12-2002 à 18:24:02    

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/
Reply

Marsh Posté le 22-12-2002 à 18:55:02    

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++]
Reply

Marsh Posté le 25-12-2002 à 01:03:03    

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 ;)) !

Reply

Marsh Posté le 25-12-2002 à 02:00:25    

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
Reply

Marsh Posté le 25-12-2002 à 14:35:23    

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/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed