2

私はCを学んでおり、次のことをしようとしています:

  • table関数から構造体を作成する
  • pointer新しく作成したものに戻るtable

テーブルの typedef:typedef char table [8][8];

だから、私はこの関数を作成しました:

table* create_table() {
  table o;
  return &o;
}

しかし、コンパイラから、ローカル変数のアドレスを返しているというエラーが表示されます。

table関数から a を作成してからポインターを返すにはどうすればよいですか。

4

2 に答える 2

8

関数 ( ) が返すアドレスは無効になるため、ローカル変数のアドレスを返すことはできませんcreate_table。代わりに、ヒープ上に作成する必要があります。

table* create_table() 
{
    table * o;
    o = malloc(sizeof(table));
    // Edit - added initialization if allocation succeeded.
    if (o != NULL)
    {
        memset(o, 0, sizeof(table));
    }
    return o;
}
于 2012-05-15T13:40:18.357 に答える
2

ローカル変数のアドレスを返すことはできません。関数が終了すると、割り当てが解除されます。malloc を使用して割り当て、そのポインターを返す必要があります。例えば:

table* ptr = malloc(sizeof(table));
memset(ptr, 0, sizeof(table));
return table;
于 2012-05-15T13:41:41.043 に答える