2013-03-18 83 views
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將由外部因素決定。

我應該在這裏改變什麼?

+0

OT:爲什麼你的名字同樣的事情不同('收據'與'info')?這樣的名稱不會*可讀性地提高。堅持使用大寫的類型,並使用小寫變量。像'typedef ... Receipe_info;'它允許你使用像'Receipe_info receipe_info;'這樣的變量,甚至進一步指示像'Receipe_info * preceipe_info;'和'Receipe_info ** ppreceipe_info;'最後一條規則可能有幫助的指針你*通過查看你的代碼*看到*你的錯誤。 – alk 2013-03-18 19:11:36

回答

4

這部分不會工作 - 你正在做兩個解引用,但在錯誤的順序

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

有待

(*info)[0].length = 100; 
(*info)[1].length = 200; 
+0

我欠你一杯啤酒。 ;) 謝謝! – 2013-03-18 19:06:39

相關問題