我想从一个函数向其他函数发送符号结构,我想创建一个数组,每个单元格将指向以下结构的不同值:
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一直都会被覆盖。 我的目的是建立一个符号表,在代码的每次迭代中我都会向数组添加另一个单元格
任何想法?
答案 0 :(得分:0)
有一个问题,realloc
它应该是curr_symbol = (symbol*)realloc(curr_symbol,sizeof(symbol)*(temp+1));
您实际上正在为它分配sizeof pointer
,即4个字节。
一条建议Realloc
是一项代价高昂的操作,您应该在必要时使用它,而不是在每个实例上使用它
你可以在function3而不是function1中malloc
。如果你这样做,你甚至不需要通过function2传递指针。
或者检查是否真的需要realloc
。例如: - 检查指针是否分配了内存。 if(ptr!=null){ //realloc }
这也可以作为检查案例。
祝你好运。 :)