【发布时间】: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(&array); -
那个变量被声明为
dynamicArray array;?那你就不用调用malloc()了,内存已经在变量里面了。