Accueil > Forum > > > > Structures, pointeurs, malloc et realloc reunis !! :)
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
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|