2013-02-26 100 views
1

我有這樣的結構在這裏:動態分配的指針數組結構用C

typedef struct _open { 
    int x; 
    struct _open *next; 
} *NODE; 

而且在我的主要功能我宣佈這個指針:

NODE open = initOpen(size); 

這裏的initOpen功能:

NODE initOpen(int size) { 
    return (NODE)malloc(sizeof(struct _open)*size); 
} 

我這正確嗎?我可以在主函數中訪問我的數組:打開[0]打開[9]?

+0

我可以在我的代碼中更改什麼以創建一個指向結構的指針數組? – 2013-02-26 02:13:57

+0

你的標題說「分配指向結構的數組」,但是從你的代碼中你似乎想要分配一個結構數組(而不是指針數組)。這是什麼? – newacct 2013-02-26 08:26:21

回答

0

首先,你應該尊重一些約定:

typedef struct node { 
    int x; 
    struct node *next; 
} *nodePtr; 

二,什麼是參數大小的使用情況如何? 據我分配一個新的NODEPTR正確的方法是:

nodePtr initNodePtr() { 
    return (nodePtr)malloc(sizeof(struct node)); 
} 

而且不要忘記在使用後釋放內存:

nodePtr node = initNodePtr(); 
... 
... 
free(node); //should be wrapped in a function to respect design. 

創建結構數組,你應該做到以下幾點:

typedef struct { 
    int x; 
    node* next; 
} node; 

int main() { 
    node* nodeArray = (node*)malloc(sizeof(node)*50); // 50 = size of your array 
    ... 
    // do whatever you want 
    ... 
    free(nodeArray); 
} 

未經測試,請告知我是否有錯誤。

1

首先,你在做什麼動態分配數組是錯誤的。
我不確定你是否真的想要你寫的東西,也就是鏈接列表,或者你說的東西,這是動態分配的數組

以下是你應該怎麼做動態分配的陣列。希望能幫助到你。 通過這樣做,您可以在內存用完之前,根據需要將盡可能多的整數添加到陣列中。你可以訪問使用數組方式排列,但有指針​​第一:darray->數組[0]

鏈表,但是,不能用這種語法進行訪問。

#include <stdio.h> 
#include <stdlib.h> 

#define INITSIZE 8 

typedef struct dyarr{ 
    int num; 
    int max; 
    int *array; 
}arr; 

arr* makeArr(); 
void add(arr*, int); 

int main(int argc, char const *argv[]){ 
    int t; 
    arr* darray = makeArr(); 
    while(scanf("%d", &t) != EOF){ 
     add(darray, t); 
    } 
    int i; 
    for(i = 0; i<darray->num; i++){ 
     printf("%d\n", darray->array[i]); 
    } 
    getchar(); 
    return 0; 
} 

arr* makeArr(){ 
    arr* A = malloc(sizeof(arr)); 
    A->max = MAXSIZE; 
    A->num = 0; 
    A->array = malloc(sizeof(int)*A->max); 
    return A; 
} 

void add(arr* a, int i){ 
    if(a->num == a->max){ 
     a->max *= 2; 
     a->array = realloc(a->array, a->max); 
    } 
    a->array[a->num++] = i; 
}