插入到 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;
}
我正在尝试实现一个动态字符串数组。但是我遇到了一个小问题。我没有正确分配内存,但我不知道做错了什么。
我的动态数组结构如下:
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;
}