2012-04-09 64 views
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; 
} 

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

這個簡單的整數值放置到整數參數顯示我堆棧溢出 或任何其他訪問內部字段 和字符指針將分配strdup(我可以使用的唯一內存分配)。

只要記住,我不能使用任何形式的內存分配。

其次是,有人指示我設置結構的靜態數組。像

static Branch BranchList[500] 

但我怎麼能爲每個分支做同樣的事情?

+0

你真的應該標記這個功課堆棧大小... – 2012-04-09 07:11:08

+1

可能u顯示更多的代碼,具體如下:你的結構中有幾個指針,你說你不允許使用內存分配,所以我想知道你如何設置他們指向的內容? – 2012-04-09 07:19:50

+0

這可能只是一個初始化問題。始終使用默認初始化程序'= {0}'初始化所有數組。 – 2012-04-09 08:32:09

回答

1

問題似乎是你在聲明之前使用了結構。您可能想要按相反順序定義它們。

+0

但是爲什麼會導致SO?他的程序實際上會觸發編譯錯誤。 – 2012-04-09 07:14:40

+0

由於數組在C中實現的方式。在C中,數組自動分配爲連續區域。你要求編譯器在'Bank'結構中分配'MAX_BRANCH''分支',但是在那個文件中'Branch'尚未定義,所以編譯器不知道有多少空間爲它分配。 'Branch'中的'Client'也一樣。順便說一句,我可能是錯的。嘗試改變聲明的順序,看看它是否有幫助。如果沒有,讓我知道,以便我可以刪除這個答案。 – 2012-04-09 07:19:10

+0

這樣做,我只是將其複製到網站的相反。只是爲了讓你知道結構放在不同的頭文件中。 – lddmonster 2012-04-09 07:20:29

0

首先,改變結構的順序以廢除compilation errors。然後,談到堆棧溢出的問題,你真的在​​使用巨大的數組,如果你有這些內部函數,那麼你只需聲明每個結構的一個變量,就可以得到 的所有可能性

將它們轉換爲靜態,可能會爲您節省,因爲您會將它們推送到數據部分而不是堆棧。但是這取決於分配給您的進程的數據部分,而這個數據部分又取決於您正在運行的系統(OS)。

而且一旦你這樣做,

static Branch BranchList[500]; 

可以爲所有分支機構分配空間,所以這裏是每個分支這個問題嗎?

當你排除malloc如果static沒有解決您的問題,請嘗試增加使用setrlimit

+1

我無法想象一個入門級的任務,它排除了需要使用'setr​​limit'的動態分配:-) – 2012-04-09 07:38:26

+0

哈哈:)的確如此,但是OP堅持這一點。 – 2012-04-09 07:39:19

+0

做靜態分支BranchList [500]給了我一個分支結構數組現在我需要在數組中的每個塊有一個客戶端結構數組,這就是我的問題我該怎麼做?! – lddmonster 2012-04-09 12:34:01

相關問題