Citation:
Envoyé par skip78
Citation:
Envoyé par gtk_file_selection_get_filename
Il serait préférable de faire une copie du chemin retrouné grâce à g_strdup.
Version imprimable
Citation:
Envoyé par skip78
Citation:
Envoyé par gtk_file_selection_get_filename
Il serait préférable de faire une copie du chemin retrouné grâce à g_strdup.
bah de toute facon ca ne marche pas !Code:
1
2
3
4
5
6 gchar nom[256],num[4]; gchar *txt; FILE *fp; nom = NULL; num = NULL;
'incompatibles types in assignment'
En fait ca ne marche pas parce que j'ai deja alloué un espace memoire aux chaines ...
Ah bien vu !Citation:
Envoyé par gege2061
Effectivement ceci expliquerait cela ...
Si il se fout en static le bougre :/
Je vais voir ca merci en tout cas merci :)
Ouh la la ! Faudrait voir à réviser les tableaux ;) !Citation:
Envoyé par skip78
Un tableau statique ne peut jamais être mis à NULL puisqu'il est alloué en dur.
De plus, mettre à NULL l'adresse d'un tableau (dynamique) ne modifie en rien son contenu.
Exact, là, ce ne sont pas des pointeurs.
Et pour le coup de la boucle for avec strlen(), pour moi, selon l'optimiseur, le comportement peut être indéterminé.
Pour "vider" ainsi un tableau statique, il faut utiliser l'opérateur sizeof(), ou mieux, un truc comme la macro ARRAYSIZE() quand on n'est pas sûr de la taille.
Code:
1
2
3
4
5 //Peut être déjà définie par une plate-forme, et souvent en mieux : //Voir le ARRAYSIZE() de Visual quand on compile en C++ #ifndef ARRAYSIZE #define ARRAYSIZE(x) (sizeof(x)/sizeof(x[0])) #endif
Bon lol on s'eloigne de la question là j'ai mis des exempàles à l'arrache il est evident que sizeof ne peut pas s'employer quand la chaine est vide.
La question est donc comment initialise tu une chaine de caractere defini comme cela :
sans utiliser ceci :Code:gchar* nom[25]
A noter que ca n'à aucune incidence sur mon code c'est par simple curiosité !Code:for(i=0;i<25;i++)nom[i] = (int)NULL;
Bon en tout cas les gens je pense que mon problème est résolu grace à la copie de mon const gchar* en gchar* parce que le premier était en statique.
Toujours est il que si vous avez des temoignages à apporter vous êtes les bienvenus et de plus j'attends toujours une reponse pour l'init de chaine de caractere :lol:
C'est pourquoi je ne met pas 'resolu'
En tout cas bonnes vacances à vous tous je re dans quelques temps ;)
Et merci à tous ce fut rapide et precis, comme je l'aime :mouarf:
A bientot, Skip
25 pointeurs sur gchar, donc :
Code:
1
2
3 gchar* nom[25]; for(i=0;i<25;i++) nom[i] = (gchar *)NULL;
c'est joli ...Citation:
Envoyé par joellel
moi j'aime bien cette forme.
pas besoin de cast il me semble.Code:gchar *nom[25] = { NULL };
NULL etant defini comme un void* (enfin, j'ai pas verif la norme).
Euh, ceci n'est pas une chaine de caractères, mais un tableau de pointeurs (ou de chaines de caractères pas encore allouées).Citation:
Envoyé par skip78
Pour une seule chaine, ce serait plutôt:
Code:gchar nom[25];
Fais gaffe c'est limite bêtisier du langage C....:lol:Citation:
Envoyé par skip78
Medinoc a dit que cela pourrait être un problème d'Unicode; as-tu vérifié ?
Je parie que c'est une erreur du genre depassement, ou double free, ou acces apres un free.. un truc dont on s'aperçoit pas sur une machine A et qui plante par contre sur la machine B.Citation:
Envoyé par skip78
Passez vos logiciels à Valgrind
Faites les bouillir
Pour voir si les depassements d'origine
Peuvent revenir
Salut à tous :)
De retour de vacances, je me retrouve toujours face au même problème de portage :mouarf: :aie:
J'ai beau avoir copié mon chemin sur une chaine de caractere dynamique, rien n'y fait :(
Donc bon si à tout hasard quelqu'un à un debut de reponse, il est le bienvenue ;)
Je vais voir ca merci ^^Citation:
Envoyé par Gruik
Ouais bon le programme marche sur certaines machines et pas sur d'autres donc ca doit effectivement être une erreur de depassement de memoire. Le problème c'est que je ne sais pas comment faire pour verifier ca :mrgreen:
Valgrind est une enigme pour moi je l'ai dl sur le site officiel, et il ne s'installe pas et je n'aarive pas à l'installer ni ne sait comment m'en servir :)
Ouiii je sais je suis une merde mais là j'ai besoin d'aide alors je l'assumes :lol:
Bon Valgrind ca m'a l'air de marcher que sous linux en fait donc Que faire pour detecter un depassement de memoire ??? :cry:
Gestion de la mémoire, ça devrait pouvoir t'aider, par contre il faut remplacer les appel à malloc, free et compagnie par sma_malloc, sma_free et sma_compagnie (:aie:) et inclure le fichier d'en tête.Citation:
Envoyé par skip78
Il y a aussi le module SYSALLOC : http://emmanuel-delahaye.developpez.com/clib.htm d'Emmanuel Delahaye, je ne crois pas qu'il détecte les dépassement de capacité.
Et l'article qui a inspiré mon module : Allocation de mémoire sécurisée en C et C++
;)
Merci beaucoup gege je commencais à m'inquieter ;)
Bon bah en fait pas merci lol je pensais que c'était des outils tout fait mais non :aie:
J'ai un peu la flemme de me lancer la dedans je dois l'admettre ;)
Faut savoir tu veux un outils complet (par conséquent il faut passer quelques heures dessus pour le comprendre réussir à faire ce que tu veux) ou un outils maison plus simple d'utilisation mais qui te demande un peut de travail :(Citation:
Envoyé par skip78
Pour mon code, si tu veux éviter de transformer les noms de fonction, tu peux remplacer les macro :
ParCode:#define sma_malloc /* ... */
Dans ce cas il te suffit d'inclure le fichier, mais attention, il doit être inclue en dernier (pour ne pas faire de remplacement dans stdlib.h par exemple) et tu doit ajouter des #undef au début du fichier sma.c pour utiliser les vrai fonctions.Code:#define malloc /* ... */
Mais sans un minimum d'effort, ton programme ne va pas se corriger tout seul.