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

 C Discussion :

PB Realloc avec pointeur sur tableau passé en parametre


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 16
    Points
    16
    Par défaut PB Realloc avec pointeur sur tableau passé en parametre
    Bonjour j'ai un pb avec un realloc dans une fonction, le code suivant marche si je met i_nb = 2 mais pas avec i_nb = 3 :


    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    static int i_ajoute(/*@out@*/ unsigned short ** p_tab, /*@out@*/	int * p_size)
    {
    	int 				i;
    	int				i_nb = 3;
    	int 				i_taille;
     
    	for (i = 0; i< i_nb; i++)
    	{
    		(*p_size)+=1;
     
    		i_taille = (*p_size) * sizeof(unsigned short);
     
    		//Augmente la taille
    		*p_tab = realloc((*p_tab),i_taille);
    		if((*p_tab) == NULL)
    		{
    			printf("ERREUR: Allocation memoire\n");
    			return 0;
    		}
    		printf("Apres realloc\n");
    		*p_tab[(*p_size)-1] = (unsigned short)i;
    	}
     
    	return 1;
    }
     
    int main ( int argc, char ** argv)
    {
     
    	unsigned short		* p_tab_elt_suppr = NULL;
    	int i_size = 0;
     
    	i_ajoute(&p_tab_elt_suppr, &i_size);
    	printf("FIN\n");
    	return 1;
    }

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		(*p_tab)[(*p_size)-1] = (unsigned short)i;
    D'autre part, tu as une fuite de mémoire potentielle dans le realloc (si il échoues, tu as perdu ton pointeur d'origine) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    unsigned short *tmp = NULL ;
     
    ....
    		tmp = realloc((*p_tab),i_taille);
    		if(tmp == NULL)
                     {
                       if ( *ptab != NULL )
                           free(*ptab);
                       *ptab = NULL ;
                        return 0 ;
                     }
                    *ptab = tmp ;
    ..
    Enfin, même si C le permet, pourquoi ne pas écrire simplemnt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		(*p_size) = (*p_size) + 1;
    plutôt que :

    C'est plus lisible

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Mince les parenthese je les avais rajoutées de partout à part la ...
    Merci pr la fuite mémoire je n'y avais pas pensé.

    Pour la lisibilité ... je pense que ca dépend des personnes, moi personnes je trouve += plus lisible...

    Merci encore

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

Discussions similaires

  1. JNA pointeur sur tableau de structure
    Par NyTR0 x dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 30/12/2009, 17h43
  2. Pointeur sur tableau de structure
    Par Mercenary Developer dans le forum Débuter
    Réponses: 3
    Dernier message: 22/09/2008, 08h35
  3. [x86_64] Passer un pointeur sur tableau défini dans .data
    Par khazna dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 24/04/2008, 19h49
  4. [Debutant] Pointeur sur tableau
    Par Pahcixam dans le forum Débuter
    Réponses: 7
    Dernier message: 25/05/2007, 21h19
  5. Réponses: 11
    Dernier message: 20/10/2006, 13h19

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