Problème malloc sous RedHat 7.3

cs_deuchman Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 29 mai 2008 - 3 mai 2004 à 15:28
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 - 5 mai 2004 à 13:00
Salut à tous !
Voilà, j'ai un problème avec un programme C sous une RedHat 7.3.
Lorsque j'utilise la fonction mallc pour allouer de la mémoire à un tableau ( se tableau se situe dans un structure ), le système me répond "Segmentation fault".

Ma RedHat tourne en vmware.

J'ne sais vraiment pas ce que c'est !! Dans mon code, au préalable, je fais exactement les mêmes choses plusieurs foit mais pas pour le meme tableau (meme structure par contre).

J'vous donne le bout de code qui merde :

if (isinline((line+2),"SETEPATH")){
found=0;
for (j=0;j<l;j++){
strcpy(tmp,xpath(ptrlig[j]));
XGFPATH.encoding[j]=(char *) malloc(strlen(tmp));
XGFPATH.Nenc=l;
strcpy(XGFPATH.encoding[j],tmp);
}

Voilà... bon ben je dit merci déjà a tous ceu qui m'auront lut, aider voir débugger.
Merci.

6 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
3 mai 2004 à 19:14
Euh t sur ke c malloc ki plante ?
Tout d'abord, segmentation fault, ca signifie kil ya un debordement de tampon, or je vois un joli strcpy !! Remplace ton strcpy par un strncpy, et puis tu nora plus de pb de ce genre...

Utilises toujours les fonction cousine de strcpy, strcat : STRNCPY, STRNCAT...

Tu evitera tout pb de buffer overflow ou otre...

Voila si c pas ca, tu re, et j'essairai de trouver mais logikment, c ca...

VOila !

Bonne prog !

++
Alhexman
0
cs_deuchman Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 29 mai 2008
4 mai 2004 à 06:52
C super sympa tt ca....
le seul soucis, c que au debug, j'plante sur la ligne :
XGFPATH.encoding[j]=(char *) malloc(strlen(tmp));
et que le strcpy s'effectue correctement.

Parcontre, j'ai réduis les tailles de mes tableau dans la structure XGFPATH et la ca fonctionne, est ce qu'il n'y a pas une histoire pour allouer de la place et a la structure puis ensuite au variables de celle ci ???

Merci -j&b
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
4 mai 2004 à 17:35
Tu pourrais poster ta structure stp
Mais dans ta structure, ta pas fait

struct Type{
char huk[20];
};

huk = (char *)malloc(20 * sizeof(char));

Paske si tu initialise l'espace dans ton initialisation puis dinamykement, ca fonctionnera pa...
enfin poste, apres jte dirai

++
0
cs_deuchman Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 29 mai 2008
5 mai 2004 à 09:37
Voilà :

struct
{
...
char *encoding[8];
...
} XGFPATH;

et derrierère....plus loin :
XGFPATH.encoding[j]=(char *) malloc(strlen(tmp));

Et ca merde, uniquement sur RedHat 7.3, sous Mandrake ou Windows, ca fonctionne tres bien ! (RedHat et Mandrake en vmware)

Alors, j'ai chercher, et j'me suis appercu que si je diminuer la taille ( *encoding[2] ) ca fonctionnait (ca va plus loin dans le code et que si j'augmentai (*encoding[18] ) j'plantait sur un malloc précédent. J'ai 5 tableau du même style dans ma structure. J'ai comme l'impression qu'il n'a pas assez de mémoire pour m'allouer ce que j'ai besoin...

Merci pour tt !
-j&b-
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_deuchman Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 29 mai 2008
5 mai 2004 à 09:46
Pi en plus, j'vien de réfléchir a ce que tu as écrit :
struct Type {
char Huk[20];
}

Huk de 20, initialise pas la mémoire, mais définis simplement qu'il y 19 char + \x0 possible dans ce tableau, non ?

++
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
5 mai 2004 à 13:00
uè c exact, kan tu definis une variable du style :

char sCOucou[25];

le 24ème est réservé a '\0' (paske le premier indice est a 0...)
0
Rejoignez-nous