1

私はここにこの構造を持っています:

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);
}

私はこれが正しいですか?open[0]からopen[9]のようなメイン関数で配列にアクセスできますか?

4

2 に答える 2

1

まず、動的に割り当てられた配列のやり方が間違っています。
あなたが実際に書いたもの、つまりlinked listが必要なのか、それともあなたが言った、動的に割り当てられた arrayが必要なのか、私にはわかりません。

以下は、動的に割り当てられた配列を行う方法です。それが役に立てば幸い。そうすることで、メモリが不足する前に、必要な数の int を配列に追加できます。また、配列表記を使用して配列にアクセスできますが、最初にポインターを使用します: darray->array[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;
}
于 2013-02-26T02:28:08.980 に答える
0

まず、いくつかの規則を尊重する必要があります。

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

次に、パラメーター size の使用法は何ですか? 私によると、新しい 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);   
}

テストしていません。エラーがあればお知らせください。

于 2013-02-26T02:15:40.143 に答える