Rechercher : dans
Par :

Un problème d'initialisation avec malloc en C

Dernière réponse le 1 jun 2008 à 15:17:44 débutant en c, le 1 jun 2008 à 12:59:54 
 Signaler ce message aux modérateurs

Bonjour,
je déclare une première structure:

typedef struct _optype {
int size ;
ModeAdressage mod ;
union {
long imm ;
RegCode reg ;
unsigned long mem ;
RegCode ireg ;
struct { long dep ; RegCode reg ; } indir ;
long rel ;
struct _optype *etoil ;
} val ;
} Operande ;

et puis un autre:

typedef struct {
InstName name ;
int size ; /* taille: 0, 1, 2 ou 4 */
CCName cc ; /* utilise que pour INST_JCC */
int num_op ; /* nombre d'operandes: 0, 1 ou 2 */
Operande op[2] ;
} Inst ;

Je veux mnt déclarer un tableau op de deux cases qui pointe sur des opérandes lorsque j'écris ceci:

Operande op[2]=malloc(2*sizeof(struct _optype));

j'ai une erreur: "invalid initializer"

Comment puis-je initialiser mon tableau?

Merci!

Meilleures réponses pour « un problème d'initialisation avec malloc en C » dans :
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
La compilation et les modules en C et en C++ VoirCet 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...
Télécharger Visual C++ Express VoirVisual 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.
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les tableaux VoirType de données complexes Les variables, telles que nous les avons vues, ne permettent de stocker qu'une seule donnée à la fois. Or, pour de nombreuses données, comme cela est souvent le cas, des variables distinctes seraient beaucoup trop lourdes...
Langage C - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C sont typées, c'est-à-dire que les données contenues dans...

1

daronmaster, le 1 jun 2008 à 13:50:40

Je pense que ceci est plus convenable :

Operande *op=malloc(2*sizeof(struct _optype));

ensuite pour plus de clarté je te conseille de definir toute tes structures séparément (ne pas les définir dans d'autre structure), ainsi ton code sera plus lisible car là, ...

essaie voir mais peut etre faudra-t-il initialiser certains champs de tes structures avec des malloc...

bon courage.

tchû

Répondre à daronmaster

2

débutant en c, le 1 jun 2008 à 14:45:20
  • +1

Bonjour,

J'ai résout le problème avec :
struct _optype * op= malloc(2*sizeof(struct _optype));

mais mnt g un autre problème d'initialisation avec les mm structures:

je veux déclarer un élément de type Inst et je le nomme instruction, comment faire?

j'ai essayé: Inst instruction=malloc(sizeof(Inst)); => error: variable `instruction' has initializer but incomplete type
error: invalid application of `sizeof' to incomplete type `Inst'
error: storage size of 'instruction' isn't known

En nomant _instr la structure Inst, j'ai essayé aussi: struct _instr instruction=malloc(sizeof(struct _instr)); => error: invalid initializer

Répondre à débutant en c

3

daronmaster, le 1 jun 2008 à 14:48:07

Losrque tu fais des malloc c'est sur des pointeur donc :

Inst *instruction=malloc(sizeof(Inst));

ensuite, initialise les champs de cette structure de la meme maniere pour Operande *op.


voila essaie et reviens dire ce qu'il en est

tchû

Répondre à daronmaster

4

 débutant en c, le 1 jun 2008 à 15:17:44

ça marche.

Merci!

Répondre à débutant en c