1

最初に、間違いなくこの情報が SO に存在するため、申し訳ありませんが、追跡に問題があります。

私がやりたいポインターマジックに頭を悩ませようとしています(そして失敗しています)。実行時に、繰り返し処理できる構造体の「配列」を作成したいと考えています。

typedef struct  {
    int length;
    const char* location;
} receipt_info;

void testA()
{
    receipt_info *receipts;
    testB(&receipts);
    printf("Receipt 0 length: %i\n", receipts[0].length); // Displays valid value
    printf("Receipt 1 length: %i\n", receipts[1].length); // Displays invalid value
}

void testB(receipt_info **info)
{
    *info = malloc(sizeof(receipt_info) * 2);
    info[0]->length = 100;
    info[1]->length = 200;
}

この例では、2 にハードコーディングしましたが、IRL は外部要因によって決定されます。

ここで私は何をすべきですか?

4

1 に答える 1

4

この部分は機能しません -- 2 つの逆参照を行っていますが、順序が間違っています。

info[0]->length = 100;
info[1]->length = 200;

する必要がある

(*info)[0].length = 100;
(*info)[1].length = 200;
于 2013-03-18T19:04:33.860 に答える