2015-12-04 57 views
0

如何創建數組結構創建對象數組並分配

+1

不要將'malloc'和朋友的結果放在C中!注意:代碼中沒有2D數組。你有一維數組指針指向一維數組。 – Olaf

+0

看起來更像是'struct'的數組和用例。一般來說,如果你想存儲異構數據,使用'struct'。可能與一個_flexible陣列member_。 – Olaf

+0

'pml [X] [pml [0]] + = 1;'這看起來不正確。 'pml [0]'是一個指針。 –

回答

1

看起來您正在嘗試創建動態數組或堆棧。您可以通過使用一個結構大大簡化事情:

struct Stack { 
    int capacity; 
    int index; 
    int *data; 
}; 

然後,你要的這100個(不知道爲什麼)...

struct Stack *pml = malloc(100 * sizeof(struct Stack)); 

然後初始化

for (int i = 0; i < 100; i++) { 
    pml[i].capacity = 10; 
    pml[i].index = 0; 
    pml[i].data = malloc(10 * sizeof(int)); 
} 

然後你可以用函數設置數據

void Push(struct Stack *stack, int value) { 
    // Check for reallocation 
    if (stack->index == stack->capacity) { 
     stack->capacity *= 2; //Assumes capacity >= 1 
     stack->data = realloc(stack->data, sizeof(int) * stack->capacity); 
    } 
    // Set the data 
    stack->data[stack->index++] = value; 
} 

並調用它像

Push(&pml[n], 234); // Where n < 100, is the nth stack in the array 

,當然你需要free()一切在一些點。

(注意,您應該添加錯誤檢查。)

+0

建議'stack-> data = realloc(stack-> data,sizeof *(堆棧 - >數據)*堆棧 - >容量);'所以結構字段'數據'類型可以更改,而不需要搜索/更新'malloc()/ realloc()'的代碼。 – chux

+0

當我想從數組中打印一些值時,它總是打印0,爲什麼?我試着用這個代碼使用printf(「%d」,pml [X] .data [pml [X] .index]); – Abdir

+0

我將它設置爲堆棧。你想要一個堆棧還是一個數組?我把一個堆棧的例子放在一起:https://ideone.com/mcbP5P。 –