begin process at 2012 02 10 19:48:37
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Structures, pointeurs, malloc et realloc reunis !! :)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Structures, pointeurs, malloc et realloc reunis !! :)

lundi 13 mai 2002 à 22:59:30 | Structures, pointeurs, malloc et realloc reunis !! :)

mindark

Alors la, je suis completement coulé !
Voila mon probleme :

J'ai une tableau "grid" qui est un tableau de structures "cell" :

struct cell {
bool bloquant;
int sol;
int decor;
bool decor_anime;
int frame;
};

Et je veux creer un tableau a 2 dimensions ke je peux redimensionner.

Le probleme, c ke je comprend bien les pointeurs pr les tableaux a 1 dimension, mais a 2 g du mal, et encore plus si je veux faire des realloc.. :-\

En gros, ma (plutot mes) question(s) :

Comment declarer grid[100][100] dans un 1er temps, puis comment utiliser realloc pr changer la taille.
Et enfin, comment j'accede a l'element x,y de mon tableau.

Merci d'avance
mardi 14 mai 2002 à 10:38:14 | Re : Structures, pointeurs, malloc et realloc reunis !! :)

THP

Ci dessous exemple de code pour
gérer ce problême:




typedef struct {
int nbligne, nbcolonne;
struct cell **tab;
} cellTab ;

void InitCellTab( cellTab* tab )
{
tab->nbligne = tab->nbcolonne = 0;
tab->tab = NULL;
}

int ReallocCellTab( cellTab* tab, int newligne, int newcolonne )
{
if ( tab->tab == NULL )
tab->tab = ( cell** )malloc( newligne*sizeof(cell*) );
else
tab->tab = ( cell** )realloc( tab->tab, newligne*sizeof(cell*) );

for ( int i = 0; i < newligne; i++ )
{
if ( tab->tab[i] == NULL )
tab->tab[i] = (cell*)malloc( newcolonne*sizeof(cell) );
else
tab->tab[i] = (cell*)realloc( tab->tab[i],newcolonne*sizeof(cell) );
}

tab->nbligne = newligne;
tab->nbcolonne = newcolonne;
return 0;

}


int main ()
{
cellTab tab;

InitCellTab( &tab );
ReallocCellTab( &tab, 100, 100 );

... tab.tab[ ma_ligne ][ ma_colonne ]....

ReallocCellTab( &tab, 400, 400 );

}



-------------------------------
Réponse au message :
-------------------------------

Alors la, je suis completement coulé !
Voila mon probleme :

J'ai une tableau "grid" qui est un tableau de structures "cell" :

struct cell {
bool bloquant;
int sol;
int decor;
bool decor_anime;
int frame;
};

Et je veux creer un tableau a 2 dimensions ke je peux redimensionner.

Le probleme, c ke je comprend bien les pointeurs pr les tableaux a 1 dimension, mais a 2 g du mal, et encore plus si je veux faire des realloc.. :-\

En gros, ma (plutot mes) question(s) :

Comment declarer grid[100][100] dans un 1er temps, puis comment utiliser realloc pr changer la taille.
Et enfin, comment j'accede a l'element x,y de mon tableau.

Merci d'avance
mercredi 15 mai 2002 à 03:00:36 | Re : Structures, pointeurs, malloc et realloc reunis !! :)

mindark

Merci de ton aide.
J'ai essaye le code que tu m'as donne, mais il semble qu'il y ait un probleme.

Tout d'abord, je dois expliquer une chose :
Les "cells" correspondent en fait a des cases pr un jeu en 3D iso (des tiles).

Le tableau correspond a l'ensemble de tt ces tiles.
Quand je sors du tableau avec mon perso, le jeu plante.

Avec tes sources, la 1ere utilisation de ReallocCellTab marche bien (c'ead utilisation de malloc)

Puis j'essaie de redimensionner mon tableau, il n'y a pas d'erreur, a part ke je plante qd j'essaie d'aller sur les cases nouvellement crees.

En gros, tt ca pr dire que ta fonction ne fait pas d'erreur, compile bien, et ne plante pas a l'utilisation, mais il semble qd meme k'il y ait un probleme...

Une idée du probleme ?
mercredi 15 mai 2002 à 09:43:41 | Re : Structures, pointeurs, malloc et realloc reunis !! :)

THP


Le problême que l'on peut avoir avec les realloc()
vient du fait que l'adresse memoire du bloc risque de changer. C'est a dire que la séquence du type

cell* mycell = &tab.tab[i][j];

Realloc....

mycell réference alors probablement une adresse incorrecte.
Tout accès à mycell->xxx peut générer une erreur
"access violation"

Tu peux mettre les lignes de code
"autour" de l'appel à ReallocCellTAb()
sur le forum ??


-------------------------------
Réponse au message :
-------------------------------

Merci de ton aide.
J'ai essaye le code que tu m'as donne, mais il semble qu'il y ait un probleme.

Tout d'abord, je dois expliquer une chose :
Les "cells" correspondent en fait a des cases pr un jeu en 3D iso (des tiles).

Le tableau correspond a l'ensemble de tt ces tiles.
Quand je sors du tableau avec mon perso, le jeu plante.

Avec tes sources, la 1ere utilisation de ReallocCellTab marche bien (c'ead utilisation de malloc)

Puis j'essaie de redimensionner mon tableau, il n'y a pas d'erreur, a part ke je plante qd j'essaie d'aller sur les cases nouvellement crees.

En gros, tt ca pr dire que ta fonction ne fait pas d'erreur, compile bien, et ne plante pas a l'utilisation, mais il semble qd meme k'il y ait un probleme...

Une idée du probleme ?
mercredi 15 mai 2002 à 11:07:39 | Re : Structures, pointeurs, malloc et realloc reunis !! :)

mindark

Ok, je vais essayer de faire simple :


//Declaration des structures

struct cell {
bool bloquant;
int sol;
int decor;
bool decor_anime;
int frame;
};

typedef struct {
int nbligne, nbcolonne;
struct cell **tab;
} cellTab ;

Map::Map ()
{
//Initialisation de notre grid
grid.nbligne = grid.nbcolonne = 100;

grid.tab = ( cell** )malloc( 100*sizeof(cell*) );
for ( int i = 0; i < 100; i++ )
{
grid.tab[i] = (cell*)malloc( 100*sizeof(cell) );
}

for (int i=0;i<100;i++)
for (int j=0;j<100;j++)
{
grid.tab[i][j].sol=0;
grid.tab[i][j].decor=0;
grid.tab[i][j].decor_anime=false;
grid.tab[i][j].frame=0;
grid.tab[i][j].bloquant=false;
}
}

void Map::redimensionne(int newligne, int newcolonne )
{
grid.tab = ( cell** )realloc( grid.tab, newligne*sizeof(cell*) );

for ( int i = 0; i < newligne; i++ )
{
grid.tab[i] = (cell*)realloc( grid.tab[i],newcolonne*sizeof(cell) );
}


grid.nbligne = newligne;
grid.nbcolonne = newcolonne;
}

Et ds le main.cpp :

Map mamap=new Map (); //Ca marche bien
mamap->redimensionne(200,200) // a l'air de marcher
mamap->grid.tab[150][150].sol=3; //plante ici

Cependant, a priori ca marche certaines fois, mais plante pr d'autres valeurs nbligne..

Merci pr ton aide
mercredi 15 mai 2002 à 11:21:07 | Re : Structures, pointeurs, malloc et realloc reunis !! :)

THP


Honte sur moi!!! j'ai effectivement oublié qq chose
Voici le code corrigé
(Reallocation n'initialise pas à NULL les nouvelles
colonnes, d'ou plantage "aléatoire" )

void Map::redimensionne(int newligne, int newcolonne )
{
grid.tab = ( cell** )realloc( grid.tab, newligne*sizeof(cell*) );

// Correction, NULL sur les nouvelles colonnes
for ( int k = grid.nbligne; k < newligne; k++ )
grid.tab[k] = NULL;

for ( int i = 0; i < newligne; i++ )
{
if ( grid.tab[i] == NULL )
grid.tab[i] = (cell*)malloc( newcolonne*sizeof(cell) );
else
grid.tab[i] = (cell*)realloc( grid.tab[i],newcolonne*sizeof(cell) );
}


grid.nbligne = newligne;
grid.nbcolonne = newcolonne;
}
mercredi 15 mai 2002 à 13:02:56 | Re : Structures, pointeurs, malloc et realloc reunis !! :)

mindark

Merci bcp, ca a l'air de fonctionner ;)

A+


Cette discussion est classée dans : int, tableau, pointeurs, structures, realloc


Répondre à ce message

Sujets en rapport avec ce message

tableau de pointeurs vers des structures [ par Kurpeus1 ] Bonjour et joyeuses fêtes a tous.Je voudrais créer un tableau de pointeurs vers des structures (de taille identiques) mais je ne sais pas trop comment probleme de tableau de pointeurs [ par doditch77 ] Bonjour, Je travaille sur un projet. J'ai crée un classe Oiseeu et une classe voliere. Cette derniere doit etre munie d'un constructeur par défaut qui Un problème avec les structures en C ??!! [ par IHECinformaticien ] Bonsoir/Bonjour, dans le code source qui suit, j'ai défini un tableau de type structure date( une structure qui contient le jour, le mois et l'année), Les pointeurs en langage C. [ par IHECinformaticien ] Bonjour, 2009 c'est ma première année en langage C et mars c'est mon premier mois dans les pointeurs alors je trouve encore des difficultés lors de la Utilisation de Realloc [ par Kite37 ] Bonjour,J'aurais aimé avoir une petite précision vis à vis de la fonction realloc.En effet, celle ci permet de redimensionner des tableau dynamique, m Agrandir la taille d'un tableau ? [ par ndubien ] Bonjour, Je cherche à agrandir un tableau ainsi:int variable = malloc( sizeof(int)*taille );Pour qu'elle devienne: int variable = malloc( sizeof(int)* passer un tableau 2D en paramètre et retourner une somme [ par lionpri ] Bonjour,Je suis débutant en C et j'ai du mal à comprendre les déclarations de fonction. J'aimerais passer un tableau 2D en paramètre d'une fonction et Allocation dynamique de mémoire d'un tableau dans une fonction [ par DJfewos971 ] Bonjour a tous,mon problème est de pouvoir alloué la mémoire dynamiquement d'un tableau dans une fonction.Voici mon problème niveau Code:#include #inc saisie des élements d'un tableau [ par epsilonna ] bnjour je suis une débutante en langage Cje me sens triste parce que je n'arrive pas a résoudre aucun probleme :-(alors mon probleme est:si je fais la


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,271 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales