如何将枚举值传递给结构

时间:2015-12-02 16:28:41

标签: c gcc enums structure

我的问题是我需要将参数(instType,typ1,* op1 ...)中的值传递给结构类型tInst。

我确定这是一个微不足道的问题,但我花了大约3个小时的时间来处理它。

GCC返回分段错误11。

我的.h文件

typedef enum tInstCode {

    I_ADD=0, // (dest, addr, addr) +
    I_SUB, // (dest, addr, addr) -
    I_MUL, // (dest, addr, addr) *
    I_DIV, // (dest, addr, addr) /

} tInstCode;



typedef enum TypeI{
    INT=0,  
    DOUBLE, 
    STRING
} TypeI;


typedef struct iOperand
{
    TypeI type; 
    void *content; 
} iOperand;

typedef struct tInst 
{
    tInstCode instType; 
    iOperand *op1; 
    iOperand *op2; 
    iOperand *res; 
} tInst;

typedef struct ListItem 
{
    tInst Instruction;
    struct ListItem *NextItem;
} tListItem;

我的主文件:

void generateInstruction(tInstCode instType, TypeI typ1,  void *op1, TypeI typ2, void *op2, TypeI typ3, iOperand *op3 )

{

   tListOfInstr list;
   listInit(&list);  //list defined in another file
   tInst* I;

   I->instType = instType;
   I->op1->type = typ1;


   I->op1->content = op1;

   I->op2 -> type = typ2;
   I->op2 -> content = op2;

   I->res -> type = typ3;
   I->res -> content = op3;
   listInsertLast(&list, *I);

}


int main(int argc, char** argv)
{
  int a;      
  a=8;
  int *b;      
  b = &a; 

  int c;       
  c=1;
  int *d;      
  d = &c; 

  generateInstruction(0, DOUBLE, *b, INT, *d, INT, NULL);


}

1 个答案:

答案 0 :(得分:1)

tInst* I;

I->instType = instType;

您没有为I分配内存。

因为它当前是I只是一个带有(可能)随机值的指针。使用malloc获取具有可用内存的合适地址。

这可以这样做:

tInst* I;
I = malloc(sizeof(tInst));
I->op1 = malloc(sizeof(iOperand));
I->op2 = malloc(sizeof(iOperand));
I->res = malloc(sizeof(iOperand));

尽管请记住malloc可能会失败,因此您需要检查NULL的返回值。