1

私は初心者なので、これで少し余裕を持ってください。そのため、現在作業しているヘッダー ファイルに 2 つの関数と 1 つの構造体があります。

これは構造体です:

typedef struct ArrayList
{
    // We will store an array of strings (i.e., an array of char arrays)
    char **array;

    // Size of list (i.e., number of elements that have been added to the array)
    int size;

    // Length of the array (i.e., the array's current maximum capacity)
    int capacity;

} ArrayList;

これは、文字列の配列にメモリを作成して動的に割り当てる最初の関数です。容量は内部配列の長さであり、サイズは現在のサイズです (基本的に 0 である配列内の文字列の数)。

ArrayList *createArrayList(int length){

char **array = NULL;
ArrayList *n;
int size = 0;


if (length > DEFAULT_INIT_LEN)
{

array = malloc(sizeof(int) * length);
n->capacity = length;
}
else
{
array = malloc(sizeof(int) * DEFAULT_INIT_LEN);
n->capacity = DEFAULT_INIT_LEN;
}

if (array == NULL)
    panic("ERROR: out of memory in Mylist!\n");

n->size = size;

printf("-> Created new ArrayList of size %d\n", n->capacity);


return *array;

同じファイル内の別の関数内の ArrayList 構造体の容量メンバーへのポインターを実装しようとすると、前の関数の値として設定されるのではなく、初期化されません。つまり、createArrayList では n->capacity は 10 に等しくなりますが、printArrayList で使用すると初期化されず、122843753 などの乱数が表示されます。

void printArrayList(ArrayList *list)
{


printf("\n%d", list->capacity);


return NULL;
}

私の質問は、構造体メンバーを参照するときに、これらすべての関数が同じ値を「共有」するようにするにはどうすればよいかということです。IE 最初の関数が出力 -> サイズ 10 の新しい ArrayList を作成し、2 番目の関数も同様に 10 を出力します。また、構造体関数自体を変更せずにこれを行う必要があります。言葉遣いの悪い質問で申し訳ありませんが、紛らわしい場合はさらに明確にすることができます。前もって感謝します!

4

1 に答える 1

2

このコードにはいくつかの主要なcreateArrayList問題がarrayありchar **ます。に割り当てたいようです。次の問題は、は ですが、にメモリを割り当てていないことです。ArrayList *narrayn->arraynArrayList *n

于 2013-05-27T01:30:52.393 に答える