插入到 C 中的动态字符串数组

Insert to a dynamic array of strings in C

我正在尝试实现一个动态字符串数组。但是我遇到了一个小问题。我没有正确分配内存,但我不知道做错了什么。

我的动态数组结构如下:

typedef struct Array {
    char **ids;
    int size;
} dynamicArray;

我初始化它:

void initArray(dynamicArray *array) {
    array = malloc(sizeof(dynamicArray));
    array->ids = NULL;
    array->size = 0;
}

解除分配:

void freeArray(dynamicArray *array) {
    if (array->size != 0) {
        for (int i = 0; i < array->size; i++) {
            free(array->ids[i]);
        }
        array->size = 0;
        array->ids = NULL;
    }
}

但现在对我来说真正的问题是插入:

void insertArray(dynamicArray *array, char *name) {
    if (array == NULL) {
        return;
    }
    int length = strlen(name) + 1;
    array = realloc(array, (??));
    strcpy(array->ids[array->size++], name);
}

程序重新分配失败:Exception has occurred.。我真的不确定,我做错了什么。我知道我也应该分配字符串数组,但不知道如何把它放在那里。你们可以给我任何提示吗??

您需要重新分配的指针是array->ids,而不是array。当您插入数组时,您会增加它的大小。然后新元素指向 name 字符串的副本。

void insertArray(dynamicArray *array, char *name) {
    if (array == NULL) {
        return;
    }
    int length = strlen(name) + 1;
    char *copy = malloc(length);
    if (copy == NULL) { // malloc failed
        return;
    }
    strcpy(copy, name);
    char **new_ids = realloc(array->ids, (array->size+1) * sizeof(char *));
    if (new_ids == NULL) { // realloc failed
        return;
    }
    array->ids = new_ids;
    array->ids[array->size++] = copy;
}