Rechercher : dans
Par :

Allocation statique VS allocation dynamique

Dernière réponse le 23 nov 2008 à 22:15:37 Tunisiano87, le 23 nov 2008 à 19:10:55 
 Signaler ce message aux modérateurs

Bonjour,

Salut,
Je suis bloqué depuis quelques jours dans mon tp qui consite à faire des modifictation d'un code pour qu'il soit basé sur l'allocation dynamique.
Bref, ce qui me bloque c'est cette fonction:


# define TAILLE 9

typedef enum { VIDE, PLEINE } StatutCase;
typedef enum { IMPOSSIBLE, POSSIBLE } StatutValeur;

typedef struct {
StatutCase statut;
union {
/* Si statut == PLEINE, contient la valeur de la case */
char valeur;
/* Si statut == VIDE, contient un tableau tel que chaque case
alternatives[i] contient 0 pour une valeur i impossible,
1 pour une valeur i possible */
StatutValeur alternatives[TAILLE];
} contenu;
} Case;

struct Grille{
char nbCasesAJouer;
Case grille[TAILLE][TAILLE];
};

Sudoku sudokuCree(void) {
Sudoku sudoku = (Sudoku) malloc(sizeof(struct Grille));
int i, j;
Case case_vide;

if (sudoku == NULL)
return sudoku;

case_vide.statut = VIDE;
for (i=0; i < TAILLE; i++)
case_vide.contenu.alternatives[i] = POSSIBLE;

sudoku -> nbCasesAJouer = TAILLE * TAILLE;
for (i=0; i < TAILLE; i++)
for (j=0; j < TAILLE; j++)
sudoku -> grille[i][j] = case_vide;

return sudoku;
}


Ca c'est le code initial, on doit modifier cette fonction de facon a ce que TAILLE lui soit passé en paramètre, et en faisant bien sur de l'allocation dynamique.
Perso, j'ai essayé cela mais ca n'a pas marché. Si quelqu'un aura la gentillesse de m'aider, je lui serais extrêmement reconnaissant:
Voila mon code:

Sudoku sudokuCree(int TAILLE) {
Sudoku sudoku = (Sudoku) malloc(sizeof(struct Grille));
int i, j;
Case case_vide;

if (sudoku == NULL)
return sudoku;

case_vide.statut = VIDE;

case_vide.contenu.alternatives = (StatutValeur *) malloc (TAILLE * sizeof (StatutValeur) );
if (case_vide.contenu.alternatives == NULL)
return NULL;

for (i=0; i < TAILLE; i++)
case_vide.contenu.alternatives[i] = POSSIBLE;

sudoku -> nbCasesAJouer = TAILLE * TAILLE;

sudoku -> grille = (Case **) malloc (TAILLE * sizeof (Case*) );
if (sudoku -> grille == NULL)
return NULL;


for (i=0; i < TAILLE; i++) {
sudoku -> grille[i] = (Case *) malloc (TAILLE * sizeof (Case) );
if (sudoku -> grille[i] == NULL)
return NULL;
}

for (i=0; i < TAILLE; i++)
for (j=0; j < TAILLE; j++) {
sudoku -> grille[i][j].contenu.alternatives = (StatutValeur *) malloc (TAILLE * sizeof (StatutValeur) );
if (sudoku -> grille[i][j].contenu.alternatives == NULL)
return NULL;
sudoku -> grille[i][j] = case_vide;
}


return sudoku;
}


Merci.

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « Allocation statique VS allocation dynamique » dans :
[Sécurité] IP statique (fixe) ou dynamique ? VoirQu'appelle-t-on IP fixe/dynamique ? Comment choisir son adresse IP ? Que choisir entre adresse IP fixe ou dynamique ? Comment obtenir une adresse IP fixe ? Qu'appelle-t-on IP fixe/dynamique ? Quand vous vous connectez à internet, votre...
Créer un site beau, dynamique et respectueux des standards VoirVoici une liste de liens qui vous aideront à mieux exploiter les standards (HTML, CSS, DOM...) pour créer des sites plus beaux, plus dynamiques et plus respectueux des standards. A la fin de cette page, il y a également une liste de...
Adresse IP statique sous Ubuntu 8.10 VoirUbuntu 8.10 est fourni avec NetworkManager, un gestionnaire de réseau assez agressif qui essaie à tout prix trouver et maintenir une connexion internet. Le but de NetworkManager est de fournir une connexion internet simplifiée. Le problème c'est...
Télécharger IP Dynamique VoirSi vous devez héberger un site web sur votre ordinateur, mais que vous n’avez pas d’adresse IP fixe, il est assez difficile d’accéder à votre page pour les internautes. IP Dynamique est un outil permettant d’héberger un site...
Le routage sur Internet VoirLes routeurs Les routeurs sont les dispositifs permettant de "choisir" le chemin que les datagrammes vont emprunter pour arriver à destination. Il s'agit de machines ayant plusieurs cartes réseau dont chacune est reliée à un réseau différent....
Les constructeurs et les destructeurs en langage C++ VoirLa notion de constructeur Le constructeur est la fonction membre appelée automatiquement lors de la création d'un objet (en statique ou en dynamique). Cette fonction membre est la première fonction membre à être exécutée, il s'agit donc d'une...
Les objets en langage C++ VoirLa création d'objets En C++, il existe deux façons de créer des objets, c'est-à-dire d'instancier une classe : de façon statique de façon dynamique La création statique La création statique d'objets consiste à créer un objet en lui affectant un...

1

 fiddy, le 23 nov 2008 à 22:15:37

Salut,
J'ai pas lu ton code avec attention. En plus, c'est illisible, utilise la prochaine fois la balise code (bouton à droite de souligner). Ca gardera les indentations ;)
Lorsque tu réalises une allocation dynamique, c'est sur un pointeur.
Donc

 Sudoku*sudoku=malloc(sizeof(struct Grille));

Et, il est conseillé de vérifier le contenu de sudoku juste après. Car s'il y a une erreur d'allocation, malloc renverra NULL.
Du coup, tu risques d'avoir de jolis segfault par la suite ;
Donc, juste après l'allocation :
if(sudoku==NULL) exit(-1);
Ou tu mets un message explicatif, je te laisse broder ;)
J'espère que l'erreur, c'est juste le coup du pointeur.
Cdlt
Google is your friend

Répondre à fiddy
Collection CommentÇaMarche.net