0

次のように、構造体へのポインターを使用する必要がある関数があります。

      void func(struct Info* info){
         struct Block *p = malloc(sizeof(struct Block));
         sub_func1(p, info);         // here will fill the content pointed by p
         sub_func2(p);               // here just use content in p
         free(p);
      }

この関数はファイル内に.cあり、.cファイルは ac プロジェクトの 1 つのファイルです。割り当てられたメモリを再利用したいので、頻繁mallocfree. つまり、一度だけ実行しmallocます。しかし、私はどこを定義し、指し示し、実行するか途方に暮れていますmalloc。誰かアドバイスをいただけますか?

ところで、ファイルにいくつかの静的変数と静的関数がある場合、またはのように、対応するファイルで.cそれらを宣言する必要がありますか?.hextern static var;extern static void func();

ありがとう!

4

2 に答える 2

3

これの何が問題なのですか?

void func(struct Info* info){
     struct Block p;
     sub_func1(&p, info);         // here will fill p
     sub_func2(&p);               // here just use content in p
}

使用する唯一の理由は、大きすぎてスタックに収まらないmalloc()場合です。struct Block

于 2013-05-16T23:38:23.663 に答える
0

2 番目の質問:static変数は、定義されている .c ファイルの外部で宣言する必要はなく、宣言することもできません。これが、それらが静的であることの要点です。つまり、コンパイル ユニットに対してローカルです。

extern static int x;はオキシモロンです。

于 2013-05-16T23:46:44.543 に答える