0

我想将符号结构从一个函数发送到其他函数,并且我想创建一个数组,每个单元格将指向以下结构的不同值:

typedef struct symbol_def
{
    char*           sym_name;
char*           sym_type;
unsigned short  sym_address;
char            sym_is_ext;
}symbol;

我正在尝试运行此代码:

//函数-1

void compile_input_file(char* input)
{
symbol* curr_symbol;
    //Intalize curr_symbol struct
    curr_symbol = (symbol*)malloc(sizeof(symbol));
    //memset((void)curr_symbol, 0, sizeof(symbol));
    parse_command(line, &parser, curr_symbol, &index);
}

//函数-2

void parse_command(char* line, parse_params* parser, symbol* curr_symbol, int* index)
{
    sym = symbol_table_create(curr_symbol, "directive", sym_label, '0', index);
}

//函数-3

symbol* symbol_table_create(symbol* curr_symbol,char* s_type, char* label, char is_ext, int* index)
{
    int temp = *index;
    curr_symbol = (symbol*)realloc(curr_symbol,sizeof(symbol*)*(temp+1));
    curr_symbol[temp].sym_type = s_type;
    curr_symbol[temp].sym_name = label;
    curr_symbol[temp].sym_address = 0;
    curr_symbol[temp].sym_is_ext = is_ext;
    temp++;
    *index = temp;

    return curr_symbol;
} 

问题是 curr_symbol 一直被覆盖。我的目的是建立一个符号表,在代码的每次迭代中,我都会在数组中添加另一个单元格

有任何想法吗?

4

1 回答 1

0

有一个问题,realloc它应该是curr_symbol = (symbol*)realloc(curr_symbol,sizeof(symbol)*(temp+1));你实际上分配的 sizeofpointer是 4 字节。

一条建议Realloc是一项代价高昂的操作,您应该仅在必要时使用它,而不是malloc在函数 3 而不是函数 1 中的每个实例上使用它。如果这样做,您甚至不需要通过 function2 传递指针。

或者检查一下是否realloc真的有必要。例如:- 检查指针是否已分配内存。if(ptr!=null){ //realloc }这也可以作为检查用例。

祝你好运。:)

于 2012-08-09T18:43:29.593 回答