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;
次の関数は、構造体を含むヘッダー ファイルでサポートされる文字列の配列に動的にメモリを割り当てることになっています (上記を参照)。
void panic(char *s)
{
fprintf(stderr, "%s", s);
exit(1);
}
ArrayList *createArrayList(int length){
ArrayList *n = malloc(sizeof(ArrayList));
int initial = 0, i;
if (length > DEFAULT_INIT_LEN)
{
n->array = (char **)malloc(length * sizeof(int*));
n->capacity = length;
for (i = 0; i< n->capacity; i++)
{
n->array[i] = NULL;
}
}
else
{
n->array = (char **)malloc(DEFAULT_INIT_LEN * sizeof(int*));
n->capacity = DEFAULT_INIT_LEN;
for (i = 0; i< n->capacity; i++)
{
n->array[i] = NULL;
}
}
if (n->array == NULL)
panic("ERROR: out of memory in Mylist!\n");
n->size = initial;
printf("-> Created new ArrayList of size %d\n", n->capacity);
return n;
}
次に、 createArrayList 関数によって作成された、新しく割り当てられた配列に現在含まれているすべての文字列を出力する別の関数があります。
void printArrayList(ArrayList *list)
{
int i;
for(i=0; i<list->capacity; i++)
{
if (list->array[i] == NULL)
printf("(empty list)\n");
else
printf("%s\n",list->array[i]);
}
}
メイン関数に printArrayList 関数 (上記) を実装すると、出力は次のようになります。
-> Created ArrayList of size 10
(empty list)
(empty list)
(empty list)
(empty list)
(empty list)
(empty list)
(empty list)
(empty list)
(empty list)
(empty list)
(empty list)
ただし、strcpy(n->array[1], "apple");
文字列を保持する 2D 配列の機能をテストする手段として createArrayList 関数を挿入すると、出力は次のようになります。
-> Created ArrayList of size 10
...そして、クラッシュします
だから私の質問は、私が間違っていることは何ですか? アレイにメモリを間違って割り当てていますか? 私はそれを取得したいので、出力は次のとおりです。
-> Created ArrayList of size 10
(empty list)
apple
(empty list)
(empty list)
(empty list)
(empty list)
(empty list)
(empty list)
(empty list)
(empty list)
(empty list)