Non mais le tiens me semble accessible je suis en train de travailler dessus c'est le truc d'emmanuel qui est galere parce qu'il y a des includes à tout va.
Bon et pour le tien il suffit donc d'include ton .c ?
Non mais le tiens me semble accessible je suis en train de travailler dessus c'est le truc d'emmanuel qui est galere parce qu'il y a des includes à tout va.
Bon et pour le tien il suffit donc d'include ton .c ?
Mais nan faut pas tout prendre (enfin tu peux, ça sert toujours), y a un mode d'emploi : Mode d'emploi du gestionnaire de mémoire SYSALLOCEnvoyé par skip78
C'est les .h que l'on inclue ! Tu as un exemple d'utilisation dans le post, il faut inclure sma.h, initialiser le module, utiliser les fonctions sma_* à la place des classique malloc/calloc/realloc/free et enfin fermer le module.Envoyé par skip78
bon voila j'ai tou fait bien comme il faut (enfin il me semble)
et bien evidemment il ne reconnait pas les declarations ^^
Comme si il fallait rajouter une ligne dans les options du compilateur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 [Linker error] undefined reference to `sma_init_' [Linker error] undefined reference to `sma_end_' [Linker error] undefined reference to `sma_malloc_' ...
Oui oui autant pour moi j'ai bien evidemment inclu le .h, comme dans l'exemple, et modifié tous les mallocs (je n'ai pas de reallocs ni de free)Envoyé par gege2061
Tu as ajouté les fichiers à ton projet ? Il doivent être compiler avec.Envoyé par skip78
Ah bah déjà c'est pas terrible, à chaque appel de malloc/calloc ou realloc doit correspondre un appel à free pour libérer la mémoire : encore un peu de lectureEnvoyé par skip78
Envoyé par gege2061
boulet time j'ai effectivement omis de les compiler mdr
Bah il me semblait que la liberation memoire n'était pas utile dans le cas ou on ne pouvait la faire avant la fin du programme puisque lors de l'arret du programme la memoire est liberee par elle meme. Donc c'est vrai que du coup je ne fait jamais de freeEnvoyé par gege2061
![]()
C'est clair que si je commencais par de bonnes bases j'aurai moins de problèmes j'y retourne![]()
Non, mais comme on donne la taille à l'allocation, c'est une idée à creuser.Envoyé par gege2061
dis gege tu donnes souvent ton numero comme ca ?
H_NJ_LIST_0403061931
Oui, je suis les conseil de tonton Emmanuel : Organisation du code source (et encore il n'y a pas les secondesEnvoyé par skip78
)
lol bon sinon ton mode debugg semble fonctionner, mais je ne peut pas lire l'integralité des remarques ca doit faire 10 fois la taille max de la console![]()
(A noter que j'ai mis des free de partout et que comme prevu ca ne change rien)
(ton code c'était le 6 mars 2004 à 19h31 c'est ca ?)
effectivement il te manque le 20 du debut et les secondes à la fin mais les secondes c useless quoigenre tu va ecrire deux headers en une minute
)
Si tu passe un nom de fichier à sma_init, il devrait rediriger la fsortie dedans, sinon tu peux le faire à la main :Envoyé par skip78
Mais c'est vrai que c'ets un peu trop consistant (je vais voire à mettre des niveaux de log).
Code : Sélectionner tout - Visualiser dans une fenêtre à part a.out > log_memoire.txt
Nan mais c'est plus propre et ça peux éviter d'épuiser la mémoire.Envoyé par skip78
J'utilise un générateur de code...Envoyé par skip78
Et on ne sait pas ce que font les autres en même temps...
Ouais remarque c'est vrai qu'un mec qui à les mêmes initiales que toi pourrait le faire en même temps que toi ^^
Bon en tout cas j'ai toujours pas de solution potable![]()
On m'a proposé de remplacer les char* par des
char Path[FILE_MAX_PATH+1];
mais je sais pas ce que ca peut changer ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 char Path[FILE_MAX_PATH+1]; /* chépu y'a une constante qui va bien */ gchar *chemin; chemin = gtk_file_selection_get_filename(GTK_FILE_SELECTION (file_selection) ); if( !chemin ) ERREUR("saisie chemin"); memset( Path, 0, sizeof(Path) ); strncpy( Path, chemin, sizeof(Path)-1 ); gtk_widget_destroy(file_selection);
Tu ne fais pas la différence entre un pointeur sur char non initialisé et un tableau de char ?Envoyé par skip78
Lol bah si mais bon je vois pas ce que concretement ca peut m'apporter ?
Normalement ca ne devrait rien changer![]()
Et ça, ça ne devrait rien changer ?pointeur sur char non initialisé
Sais-tu au moins ce qu'est un pointeur ?
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Bon au lieu de parler par enigme vous pourriez m'expliquer ?![]()
Parce que j'ai beau penser savoir tout ca, si c'est pas le cas faudrait m'expliquer plutot que de m'envoyer promener ...
Ma chaine de caractère est un const char*, initialisé à NULL, comme convenu dans l'utilisation de la fonction de recherche de chemin utilisée ...
Donc bon ce pseudo debat n'à rien à voir avec mon probleme puisque le const char m'est imposé.
J'attends cependant une explication![]()
Ce n'est pas une chaine de caractere. Une chaine de caractere est un tableau de caractere termine par '\0'. Si tu veux utiliser ton pointeur, il faut l'associe a un bloc memoire alloue par malloc().Envoyé par skip78
Ah ouais d'accord je viens de capter ce que vous vouliez dire![]()
Le fait est que le const char * est géré par la fonction d'appel de chemin et par conséquent que cette dernière s'occupe de lui allouer une petite place memoire![]()
Toujours initialisé un pointeur avec une adresse. Sinon par défaut le mettre à NULL ou 0;un pointeur sur char non initialisé
Un pointeur sur un tableau de caractères possède l'adresse d'un des éléments de ce tableau de char.
Partager