我有一个包含字符串数组(char数组)的结构和一个用于数组最大容量的int。
typedef struct ArrayList
{
char **array;
int capacity;
}
使用malloc以自己的方法初始化数组。
list->array = malloc(sizeof(char *) * templength);
并将各个字符串初始化为
list->array[nextEmptyString] = malloc(sizeof(str));
strcpy(list->array[nextEmptyString], str);
我需要能够从内存中清除有关该数组的所有内容,然后将新指针传递给该数组,但是当我在释放数组之前尝试释放单个字符串时,它会对新数组进行加扰。
for (word = 0; word < list->capacity; word++)
free(list->array[word]);
free(list->array);
list->array = newArray;
其中list是ArrayList,newArray是字符串数组。如果我注释掉for循环,代码会正确运行,但是我不是只有一堆孤立的字符串在内存中浮动?
预期输出类似于Adding Pierre to L1 ...
,而是Adding �c� to L1 ...
答案 0 :(得分:4)
在数组中分配字符串时,
malloc(sizeof(str))
仅为char *
分配足够的空间,而不是它指向的字符串(除非str
是普通数组而不是指针)。相反,尝试
malloc(strlen(str) + 1)
为字符串中的字符分配足够的空间加上终止空值。
答案 1 :(得分:1)
你应该使用string.h中的strdup函数
list->array[nextEmptyString] = malloc(sizeof(str));
strcpy(list->array[nextEmptyString], str);
似乎更好:
list->array[nextEmptyString] = strdup(str);
问题在于:您是否初始化了容量?