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 分配(我可以使用的唯一内存分配)。

请记住,我不能使用任何类型的内存分配。

其次,有人指示我设置结构的静态数组。就像是

static Branch BranchList[500]

但是我怎样才能对每个分支做同样的事情呢?

4

2 回答 2

1

问题似乎是您在声明它们之前使用了结构。您可能希望以相反的顺序定义它们。

于 2012-04-09T07:12:55.260 回答
0

首先,更改结构的顺序以消除编译错误。然后,谈到堆栈溢出的问题,你真的在​​使用巨大的数组,如果你在一个函数中有这些数组,那么你只需声明每个结构的一个变量,你应该很可能会发生堆栈溢出

将它们转换为静态可能会节省您,因为您会将它们推送到数据部分而不是堆栈。但这取决于分配给您的进程的数据部分,而这又取决于您正在运行的系统(操作系统)。

一旦你这样做了,

 static Branch BranchList[500];

您正在为所有分支分配空间,那么每个分支的问题在哪里?

当您排除 malloc并且如果static没有解决您的问题时,请尝试使用增加堆栈大小setrlimit

于 2012-04-09T07:33:35.440 回答