0

私はCで単純であるべきことを行っていますが、何らかの理由でそれを機能させることができません。

構造体は次のとおりです。

    #define MAX_BRANCH 500
    #define MAX_BANK_CLIENTS 100000
    #define MAX_CLIENTS 10000


   typedef struct Client{
        char *pName;
        char *fName;
        int id;
        int branch;
        int AccountNum;
        int credit;
        double surplus;
        double IOU;
        double savings;
    }Client;

   typedef struct Branch{
        int BrnachNum;
        char *Name;
        int Accounts;
        double sumOfAll;
        double profit;
        int ActiveLoans;
        int Opened;
        int Closed;
        Client ClientList[MAX_CLIENTS];
    }Branch;

    typedef struct Bank{
        char *Name;
        int Branches;
        int Accounts;
        int ActiveLoans;
        double sumOfAll;
        double Profit;
        Branch BranchList[MAX_BRANCH];
    }Bank;




int main()
{
   Bank Discount;
   Discount.BranchList[0].Accounts = 1;

   return 0;
}

//--------------------------------------------

整数値を整数引数に単純に配置すると、スタックオーバーフローまたは内部フィールドへのその他のアクセスが表示され、charポインターはstrdupによって割り当てられます(使用できる唯一のメモリ割り当て)。

また、どのような種類のメモリ割り当ても使用できないことに注意してください。

2 つ目は、構造体の静的配列を設定するように指示されたことです。何かのようなもの

static Branch BranchList[500]

しかし、各ブランチで同じことを行うにはどうすればよいですか?

4

2 に答える 2

1

問題は、宣言される前に構造体を使用しているようです。逆の順序で定義することもできます。

于 2012-04-09T07:12:55.260 に答える
0

まず、コンパイル エラーをなくすために、構造体の順序を変更します。そして、スタックオーバーフローの問題に来て、あなたは実際に巨大な配列を使用しています。これらが関数内にある場合、各構造体の1つの変数を宣言するだけで、すべての確率でスタックオーバーフローが発生 するはずです。

それらを静的に変換すると、スタックではなくデータセクションにプッシュするので、節約できる場合があります。ただし、これはプロセスに割り当てられたデータセクションに依存し、プロセスは実行中のシステム (OS) に依存します。

そして、あなたがしたら、

 static Branch BranchList[500];

すべてのブランチにスペースを割り当てているので、各ブランチの問題はどこにありますか?

除外して いて問題が解決しないmalloc場合staticは、次を使用してスタックサイズを増やしてみてくださいsetrlimit

于 2012-04-09T07:33:35.440 に答える