2013-02-26 85 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; 
}