[英]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.