Flux rss
Rechercher : dans
Par : Mots clés Nom d'utilisateur
Messages sans réponse

Aide Structure en C

ad, le mercredi 8 novembre 2006 à 17:16:13 
 Signaler ce message aux modérateurs

Bonjour,
voila g un gros prob d'allocation memoire pour un tableau double champ situé ds une sructure.

G definit ma structure ds un fichier .h de la facon suivante :

typedef struct image_N
{
int **tableau;
}image_N

image_N saisie( );

puis ds mon fichier c
je definis ma sous fonction

image_N saisie( )
{
image_N i;

i.tableau = (int**) malloc ( 5 * sizeof (int*));
return(i)

}

Lors de la compilation le compilateur m'indique a la ligne ou j'alloue la mémoire que j'ai un probleme d'assignation de type incompatible...

Pourriez vous m'aider a resoudre ce proble urgent svp...
Merci bcp d'avance

1

lami20j, le mercredi 8 novembre 2006 à 19:29:14

Salut,

en attendant l'aide des personnes beaucoup, beaucoup plus experimentées en regardant ton code j'ai déjà remarqué des erreurs

typedef struct image_N
{
int **tableau;
}image_N


Pour la déclaration des structures tu peux faire

struct image_N {
   int **tableau;
};
ou avec typedef
typedef struct {
   int **tableau;
}image_N;
Il ne faut pas oublier le point-virgule à la fin

En ce qui concerne l'allocation de la mémoire il faut plutôt quelque chose de genre
(struct image_N *) malloc( 5 * sizeof(struct image_N) )
lami20j

Répondre à lami20j

2

kij_82, le mercredi 8 novembre 2006 à 20:30:46

Pour ce qui est de la déclaration de la structure, ce qui as été donné par lami20j est bon :

typedef struct {
   int **tableau;
}image_N;


ou

typedef struct image_N {
   int **tableau;
};


Et dans ta fonction par contre, je dirais plus un truc dans le genre :
image_N saisie( )
{
image_N i;

i = (struct image_N *) malloc(  sizeof(struct image_N) );
i.tableau = (int**) malloc ( 5 * sizeof (int*));

return(i)

}

~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~

Répondre à kij_82

3

adibou, le mercredi 8 novembre 2006 à 22:58:58

Je te remercie pour ta reponse j'ai fait ce que tu me propose mais il me sort toujour la meme erreur...


j'ai oublié de préciser( je sais pas si sa change quelque chose ) que dans ma structure je definis 2 autres variable de type int..j'espere que sa influ pas...

Je voudrais savoir quel etait le role de ta commande

i = (struct image_N *) malloc( sizeof(struct image_N) );

j'ai l'impression que tu alloues de la memoire a la structure mais pk et combien puisqu'elle n'est pas encore définit...

merci comme meme pour votre aide ;)

Répondre à adibou

4

kij_82, le jeudi 9 novembre 2006 à 09:32:41

Tu alloue déjà de la mémoire à ta structure (qu'elle contienne en plus des entier ou autre n'est pas un probleme), puis ensuite, puisque tu as un pointeur sur pointeur d'entier, il faut aussi que tu l'alloue. D'ou le fait d'allouer déjà la structure, puis chacun des composants (pointeur). Pour ce qui est des autres types simple faisant parti de ta structure, leur place sera allouée lors de l'allocation de la structure.

Par contre, tu inclu bien ton fichier.h au moins dans ton .c ?!

Parce que sinon c'est normal qu'il ne te le reconnaisse pas.

Pour inclure ton .h :

#include <./mon.h>

Enfin... la déclaration je confonds peut etre avec php a force... ^^
Je pense que ca ne te le reconnais pas parce que ton 'i' n'est pas un pointeur dans ta fonction, donc met une * juste avant ton i (et de meme pour le retour de la fonction si je me souviens bien :

image_N * saisie( )
{
image_N * i;

i = (struct image_N *) malloc(  sizeof(struct image_N) );
i->tableau = (int**) malloc ( 5 * sizeof (int*));

return(i)

}


~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~

Répondre à kij_82

5

mamiemando, le jeudi 9 novembre 2006 à 20:39:57

Il faut allouer aussi chaque case des tableaux 1D

#include <stdlib.h>

struct matrix2d_t{
  unsigned int nb_ligne;
  unsigned int nb_colonne;
  int **data;
};

matrix2d_t new_matrix2d(
  unsigned int nb_lig,
  unsigned int nb_col
){
  matrix2d_t m;
  unsigned int i;
  m.data = (int **) malloc(nb_lig*sizeof(int *));
  for(i=0;i<nb_lig;++i){
    m.data[i] = (int *) malloc(nb_col * sizeof(int)); //alloc tableau 1d
  }
  m.nb_ligne = nb_lig;
  m.nb_colonne = nb_col;
  return m;
}

void del_matrix(matrix2d * m){
  unsigned int i,nb_lig=m.nb_ligne;
  for(i=0;i<nb_lig;++i){
    free(m->data[i]);
  }
  free(m->data);
  free(m);
}



ou quelque chose de ce goût là...

Bonne chance

Répondre à mamiemando

7

lami20j, le samedi 11 novembre 2006 à 17:06:56

Salut,

merci pour le cours ;-))

lami20j

Répondre à lami20j

6

kij_82, le vendredi 10 novembre 2006 à 17:17:54

Bien vu ^^
~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~

Répondre à kij_82

8

 kilian, le samedi 11 novembre 2006 à 17:55:07

Vouich, je crois que si l'on oublie d'inclure stdlib.h pour malloc on peut avoir des erreurs de ce type.

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian
Les structures en langage C Différence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de... www.commentcamarche.net/contents/c/cstruct.php3
Les structures en langage C++ Différence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de... www.commentcamarche.net/contents/cpp/cppstruct.php3
[C++] initialiser les references (Résolu) Bonjour à tous, Voila j'avance doucement avec le C++ mais il y a des choses qui m'échappent encore ;) Je vous joins ma classe, j'ai mis des commentaires là où il y a des problèmes. D'autres fichiers sont nécéssaires pour compiler, mais je pense que... www.commentcamarche.net/forum/affich-1330623-c-initialiser-les-references
Structure logique d'un disque durStructure logique d'un disque dur Introduction Lorsque vous utilisez votre ordinateur, vos données sont organisées sous forme de fichiers et de répertoires, selon une structure arborescente et ces éléments sont stockés sur votre disque dur. C'est... www.commentcamarche.net/faq/sujet-6034-structure-logique-d-un-disque-dur
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ?Depuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appellé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les... www.commentcamarche.net/faq/sujet-16311-3d-secure-verified-by-visa-securecode-qu-est-ce-que-c-est
La compilation et les modules en C et en C++Cet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du... www.commentcamarche.net/faq/sujet-14440-la-compilation-et-les-modules-en-c-et-en-c
[C] Booleencoucou tout le monde.. je vous demande confirmation de la syntaxe pour faire un booléen en C : typedef enum BOOLEAN{FALSE,TRUE} BOOL; ... BOOL choix; merci ;) www.commentcamarche.net/forum/affich-1442589-c-booleen
[C++] initialisation dynamique de pointeurJe debute en C++ et je prends en main un code deja existant. Les pointeurs sont pour l instant defini de maniere arbitraire avec une taille maximum bien superieure a nos besoins. J ai donc voulu faire une initialisation dynamique mais je m heurte a... www.commentcamarche.net/forum/affich-1526883-c-initialisation-dynamique-de-pointeur
[C] Allocation dynamique - Tableau et structu (Résolu)Bonjour, J'ai cherche sur le forum les réponses à mes questions, mais certaines restent sans réponses ou un peu floues... :( Je vous explique mon problème: Je dois faire un projet un C, dans lequel j'ai décidé d'utiliser une structure d'arbre pour... www.commentcamarche.net/forum/affich-5445781-c-allocation-dynamique-tableau-et-structu
Télécharger Visual C++ 2008 ExpressVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C. www.commentcamarche.net/telecharger/telecharger-34056350-visual-c-2008-express
Télécharger Dev-C++Dev-C++ est un environnement de développement intégré (IDE) en C/C++. Son compilateur est basé sur Mingw de GCC, mais il peut également être utilisé avec CygWin. www.commentcamarche.net/telecharger/telecharger-59-dev-c
Télécharger Labo de formation C#.NetLabo de formation C#.Net représente environ 200h de formation, sous forme d'ateliers comprenant des cours au format pdf, des TD, des TP (plus de 200 exemples, exercices, mini projets sont inclus avec leurs corrections, inclus aussi un QCM de... www.commentcamarche.net/telecharger/telecharger-34058224-labo-de-formation-c-net
Dream multimedia Dreambox DM 600 PVR DVB-CPort Common Interface: , Modulateur RF: , Nombre de prises Péritel (SCART) :1 st, Compatible Dolby Digital, Télétexte, Electronic Program Guide (EPG), Minuteur: , Type de récepteur:DVB-C, Twin Tuners:No, Nombre de cartes acceptées:1, Lecteu www.commentcamarche.net/guide/917028-dream-multimedia-dreambox-dm-600-pvr-dvb-c
PHP - Structures conditionnellesQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1... www.commentcamarche.net/contents/php/phpcond.php3
Structure d'un document XMLQu'est-ce que le XML? La norme XML en tant que telle doit être vue comme un outil permettant de définir un langage (on dit alors qu'il s'agit d'un métalangage), permettant de créer des documents structurés à l'aide de balises. Une balise est une... www.commentcamarche.net/contents/xml/xmlstruc.php3
Langage C - Les structures conditionnellesQu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent... www.commentcamarche.net/contents/c/ccond.php3