IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

probleme pointer de tableau de type char


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 101
    Par défaut probleme pointer de tableau de type char
    bonsoir,

    voici mon probleme, j'ai un pointeur de tableau de type char.
    si j'ai moins de 4 elements pas de probleme au dela, j'ai un message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    *** glibc detected *** ./test1: realloc(): invalid next size: 0x0804b028 ***
    ======= Backtrace: =========
    /lib/i686/cmov/libc.so.6[0xb7e9b624]
    /lib/i686/cmov/libc.so.6[0xb7e9f1a1]
    /lib/i686/cmov/libc.so.6(realloc+0x106)[0xb7e9fb46]
    ./test1[0x8048729]
    ./test1[0x804897a]
    /lib/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb7e43455]
    ./test1[0x80485a1]
    ======= Memory map: ========
    08048000-08049000 r-xp 00000000 03:01 3252290    /home/userdev/gtk/ocr_v1-2/test1
    08049000-0804a000 rw-p 00000000 03:01 3252290    /home/userdev/gtk/ocr_v1-2/test1
    0804a000-0806c000 rw-p 0804a000 00:00 0          [heap]
    b7d00000-b7d21000 rw-p b7d00000 00:00 0 
    b7d21000-b7e00000 ---p b7d21000 00:00 0 
    b7e2c000-b7e2d000 rw-p b7e2c000 00:00 0 
    b7e2d000-b7f82000 r-xp 00000000 03:01 4023102    /lib/i686/cmov/libc-2.7.so
    b7f82000-b7f83000 r--p 00155000 03:01 4023102    /lib/i686/cmov/libc-2.7.so
    b7f83000-b7f85000 rw-p 00156000 03:01 4023102    /lib/i686/cmov/libc-2.7.so
    b7f85000-b7f88000 rw-p b7f85000 00:00 0 
    b7f8e000-b7f9a000 r-xp 00000000 03:01 4014124    /lib/libgcc_s.so.1
    b7f9a000-b7f9b000 rw-p 0000b000 03:01 4014124    /lib/libgcc_s.so.1
    b7f9b000-b7f9e000 rw-p b7f9b000 00:00 0 
    b7f9e000-b7f9f000 r-xp b7f9e000 00:00 0          [vdso]
    b7f9f000-b7fb9000 r-xp 00000000 03:01 4014412    /lib/ld-2.7.so
    b7fb9000-b7fbb000 rw-p 0001a000 03:01 4014412    /lib/ld-2.7.so
    bffea000-bffff000 rw-p bffeb000 00:00 0          [stack]
    Abandon
    voici la fonction pour mon pointeur de tableau:
    j'ai essayer plusieurs solutions trouvées sur le net pour realloc et malloc, rien de bon!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    char** F_Listage_Fichiers_Traiter(char *V_CDT, int **RNDF);
    char** F_Listage_Fichiers_Traiter(char *V_CDT, int **RNDF)
    {
    	/* parcourir un repertoire */
    	DIR *dh;
    	int i = 0;
    	char **testtab = NULL;
     
    	struct dirent *f;
    	if ((dh = opendir (V_CDT)) == NULL)
    		{
    		/* erreur:A */
    		printf("chemin & nom du dossier a traiter incorrecte! erreur:A\n");
    		}
    	else
    		{
    		char *extens;
    		char *reffext = "txt";
    		do			
    		{
    		if (NULL != (f = readdir (dh)))
    			{
    		if (strcmp(f->d_name,".") && strcmp(f->d_name, "..") && f->d_name != NULL)
    			{
    			extens = strstr(f->d_name, "txt");
    			if (extens != NULL)
    			{
    				if (strcmp(extens, reffext) == 0)
    				{
    // a voir ?	
    		testtab = realloc(testtab, sizeof(char) * i + 1);
    		//		testtab = (char**)realloc(testtab, sizeof(char) * i + 1);
    			//	testtab = (char**)realloc(testtab, sizeof(char*) * i);
    			if (testtab == NULL)
    			{
    				printf ("probleme A etape : %d\n", i);
    			}
    // a voir ?
    		testtab[i] = malloc(sizeof(char) * strlen(f->d_name) +1);
    			//	testtab[i] = (char*)malloc(sizeof(char) * strlen(f->d_name) +1);
    			//			testtab[i] = (char*)malloc(sizeof(char) * strlen(f->d_name));
    			if (testtab[i] == NULL)
    			{
    				printf ("probleme B etape : %d\n", i);
    			}
     				testtab[i] = f->d_name;
    				i++;
    				**RNDF = i;
    				}
    			}
    		}
    	} 
    	else
    	{
    		/* probleme B */
    		//printf("probleme B\n");					
    	}
    }
    while (NULL != f);	
    closedir (dh);
    }
    return testtab;
    }
    je suis sous debian lenny
    merci d'avance pour votre aide

    ps: moi et les pointeur ça fait deux

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 145
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Comme le code est assez compliqué à la première lecture, pour le debugguer, je vous conseille l'utilisation d'un debuggueur (gdb dans sa forme textuelle, ddd dans sa forme graphique).
    Avec un debuggueur, vous allez avoir la position du bug à la ligne près et vous allez aussi pouvoir executé le code ligne par ligne pour espionner tout ce que fais votre ordinateur (notamment, comment il arrive au bug)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 101
    Par défaut
    resolu



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        testtab = realloc(testtab, sizeof(testtab) * i + 1);
    l'erreur c'est moi!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de type "Char "
    Par size_one_1 dans le forum C
    Réponses: 18
    Dernier message: 19/06/2006, 15h41
  2. Initialisation d'un tableau de type STRUCT
    Par Axiome dans le forum MFC
    Réponses: 4
    Dernier message: 06/09/2005, 10h58
  3. Probleme affichage dans tableau selon requête
    Par moulette85 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 01/03/2005, 15h44
  4. [Debutant]reallocation de memoire d'un tableau de type perso
    Par killerjeff dans le forum Débuter
    Réponses: 3
    Dernier message: 04/08/2004, 17h09
  5. Réponses: 3
    Dernier message: 17/05/2004, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo