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

問題があります。実際には 4 バイトの sizeof を割り当てているreallocはずです。curr_symbol = (symbol*)realloc(curr_symbol,sizeof(symbol)*(temp+1));pointer

アドバイスはコストのかかる操作です。必要な場合にのみ使用し、function1 の代わりに function3 で使用Reallocできるすべてのインスタンスで使用する必要はありません。mallocそうする場合、function2 を介してポインターを渡す必要さえありません。

または、realloc本当に必要かどうかを確認するためにチェックを入れます。例:- ポインターがメモリに割り当てられているかどうかを確認します。if(ptr!=null){ //realloc }これはチェックケースとしても機能します。

幸運を祈ります。:)

于 2012-08-09T18:43:29.593 に答える