我有一个结构,其中包含一个字符串数组(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 ...
最佳答案
在分配数组中的字符串时,
malloc(sizeof(str))
只为 char *
分配足够的空间,而不是它指向的字符串(除非 str
是普通数组而不是指针)。相反,尝试
malloc(strlen(str) + 1)
为字符串中的字符加上终止空值分配足够的空间。
关于c - 释放 C 中结构内的 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21495330/