释放一个Char阵列,该阵列位于C中



i具有一个结构,其中包含一系列字符串(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;

其中列表为arraylist,而newarray是一系列字符串。如果我评论for循环,则该代码可以正确运行,但是我不是只有一堆孤儿琴弦在内存中漂浮吗?

预期的输出类似于Adding Pierre to L1 ...,而我得到Adding �c� to L1 ...

分配数组中的字符串时,

malloc(sizeof(str))

仅为char *分配足够的空间,而不是它指向的字符串(除非str是普通数组而不是指针)。而是尝试

malloc(strlen(str) + 1)

为字符串中的字符分配足够的空间以及终止空的null。

您应该使用String.h

的strdup函数
list->array[nextEmptyString] = malloc(sizeof(str));
strcpy(list->array[nextEmptyString], str);

看起来更好,为:

list->array[nextEmptyString] = strdup(str);

和问题:您是否初始化了容量?

最新更新