首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++中创建动态结构数组

如何在C++中创建动态结构数组
EN

Stack Overflow用户
提问于 2012-08-10 01:57:49
回答 1查看 240关注 0票数 0

我想从一个函数向其他函数发送一个symbol结构,并创建一个数组,使每个单元格都指向以下结构的不同值:

代码语言:javascript
复制
typedef struct symbol_def
{
    char*           sym_name;
char*           sym_type;
unsigned short  sym_address;
char            sym_is_ext;
}symbol;

我正在尝试运行以下代码:

//function-1

代码语言:javascript
复制
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);
}

//function-2

代码语言:javascript
复制
void parse_command(char* line, parse_params* parser, symbol* curr_symbol, int* index)
{
    sym = symbol_table_create(curr_symbol, "directive", sym_label, '0', index);
}

//function-3

代码语言:javascript
复制
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总是被重写。我的目的是构建一个符号表,以便在代码的每次迭代中向数组中添加另一个单元格

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2012-08-10 02:43:30

有一个问题,对于realloc,它应该是curr_symbol = (symbol*)realloc(curr_symbol,sizeof(symbol)*(temp+1));,你实际上分配给它的是pointer的大小,也就是4字节。

一条建议Realloc是一个代价高昂的操作,你应该只在必要的时候使用它,而且不是在每个实例上,你都可以在function3中使用malloc而不是function1。如果你这样做了,你甚至不需要通过function2传递指针。

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

祝你好运。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11889269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档