【问题标题】:Insert to a dynamic array of strings in C插入到C中的动态字符串数组
【发布时间】:2021-03-12 21:27:24
【问题描述】:

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

我的动态数组结构如下:

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.。我真的不确定,我做错了什么。我知道我也应该分配字符串数组,但不知道如何把它放在那里。各位大神可以给我点提示吗?

【问题讨论】:

  • initArray() 没有将指针返回给它的调用者。
  • 显示你是如何打电话给initArray()的。
  • 如果initArray() 应该分配dynamicArray 结构,请参阅stackoverflow.com/questions/13431108/…。如果您使用现有结构的地址调用它,那么它不应该调用malloc()
  • 我有dynamicArray array;,后跟initArray(&amp;array);
  • 那个变量被声明为dynamicArray array;?那你就不用调用malloc()了,内存已经在变量里面了。

标签: c dynamic malloc realloc


【解决方案1】:

您需要重新分配的指针是array-&gt;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;
}

【讨论】:

  • 非常感谢,现在可以正常使用了。
猜你喜欢
  • 2011-10-19
  • 1970-01-01
  • 2022-01-05
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
  • 1970-01-01
相关资源
最近更新 更多