簡體   English   中英

插入到 C 中的動態字符串數組

[英]Insert to a dynamic array of strings in C

我正在嘗試實現一個動態的字符串數組。 但是我遇到了一個小問題。 我沒有正確分配 memory,但我不知道做錯了什么。

我的動態數組結構如下:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM