gpt4 book ai didi

c - 如何在 C 中创建动态结构数组

转载 作者:行者123 更新时间:2023-11-30 17:58:56 24 4
gpt4 key购买 nike

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

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 总是被覆盖。我的目的是构建一个符号表,在代码的每次迭代中我都会向数组添加另一个单元格

有什么想法吗?

最佳答案

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

一点建议 Realloc 是一项成本高昂的操作,您应该仅在必要时使用它,而不是在每个实例上使用它您可以在 function3 而不是 function1 中进行 malloc。如果这样做,您甚至不需要通过 function2 传递指针。

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

祝你好运。 :)

关于c - 如何在 C 中创建动态结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com