rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

[C] realloc sur un tableau 2 dimensions

Posté par Papi_72, le mardi 5 février 2008 à 01:37:32
Bonjour,

J'aurais besoin d'aide parce que je n'arrive pas à reallocer un tableau deux dimensions. Mon tableau a un nombre de ligne qui évolue et trois colonnes.
Voila mon code :

float **tab;
int i;

tab = (float**)malloc( 1*sizeof(float*) ); 
    for (i=0 ; i<1 ; i++){ 
        tab[i] = (float*)malloc( 3*sizeof(float) ); 
    }

tab = (float**)realloc( tab, N*sizeof(float*) ); 
    for (i=0 ; i<N ; i++){ 
        tab[i] = (float*)realloc( tab, 1*sizeof(float) ); 
    }



Le malloc fonctionne très bien, mais le realloc ne fonctionne pas.

Merci de votre aide
Configuration: Windows XP
Internet Explorer 7.0
Répondre à Papi_72  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fiddy, le mardi 5 février 2008 à 02:07:36
Essaie ça :
tab[i] = (float*)realloc( tab[i], 1*sizeof(float) );

Qu'est-ce qui te fait dire que ça ne marche pas ?
Google is your friend
Répondre à fiddy

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Papi_72, le mardi 5 février 2008 à 02:27:04
Merci fiddy mais le code que tu m'a donné ne fonctionne pas non plus, j'arrive à compiler mais lorsque je lance l'executable, il plante aussi tot.

Si je fais un grand tableau avec malloc et que je supprime le realloc, mon programme fonctionne, le problème vient donc de mon realloc mais ou ?

Merci
Répondre à Papi_72

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Mahmah, le mardi 5 février 2008 à 10:20:11
Bonjour,

Une chose me turlupine un peu.

Tu as des lignes de colonnes contenants 3 floats, donc pourquoi ré-allouer les colonnes ?

float **tab;
int i;

tab = (float**)malloc( 1*sizeof(float*) ); 
   
for (i=0 ; i<1 ; i++)
{
   tab[i] = (float*)malloc( 3*sizeof(float) ); 
}

tab = (float**)realloc( tab, N*sizeof(float*) ); 

// allouer les nouvelles colonnes.
for (i=1 ; i<N ; i++)
{
   tab[i] = (float*)malloc( 3*sizeof(float) ); 
}

Au final il faudra une deuxième variable pour la taille, désallouer si la nouvelle est plus petite, allouer si elle est plus grande que l'ancienne..


Ou alors (si je n'ai pas perçu ton intérêt)

float **tab;
int i;

tab = (float**)malloc( 1*sizeof(float*) ); 
for (i=0 ; i<1 ; i++)
{
   tab[i] = (float*)malloc( 3*sizeof(float) ); 
}

tab = (float**)realloc( tab, N*sizeof(float*) ); 

for (i=0 ; i<N ; i++)
{ 
   tab[i] = (float*)realloc( tab + i, 3*sizeof(float) );  // On ré-alloue bien ici la colonne et non tab et bien des colonnes de 3 float et non 1.
}


Ca marche comme cela ?

M.
Répondre à Mahmah

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Papi_72, le mardi 5 février 2008 à 13:21:27
Merci Mahmah,

la première solution que tu propose fonctionne très bien.

Merci a vous de m'avoir déboqué.
Répondre à Papi_72
Logiciels pertinents trouvés dans les téléchargements
Télécharger Pack de compatibilité Microsoft Office 2007 3Pack de compatibilité Microsoft Office 2007 - En installant le pack de compatibilité pour Microsoft Office 2000, Office XP ou Office 2003, vous pouvez ouvrir, modifier et...Catégorie: Bureautique
Licence: Freeware/gratuit
Télécharger K-Lite Codec Pack Full 4.0.0K-Lite Codec Pack Full - K-Lite Codec Pack est une collection de codecs et de filtres nécessaires pour encoder ou décoder des formats audio ou vidéo....Catégorie: Codecs
Licence: Open Source
Télécharger CleanUp!  4.5.2CleanUp! - CleanUp! efface les traces de votre activité sur Internet stockées sur le disque dur, notamment : Cache du navigateur ...Catégorie: Anonymat/Confidentialité
Licence: Freeware/gratuit
Télécharger K-Lite Mega Codec Pack 4.0.0K-Lite Mega Codec Pack - K-Lite Codec Pack est une collection de codecs et de filtres nécessaires pour encoder ou décoder des formats audio ou vidéo....Catégorie: Codecs
Licence: Open Source
Plus de logiciels gratuits sur « [C] realloc sur un tableau 2 dimensions »