释放C中结构内部的char数组

时间:2014-02-01 07:18:41

标签: c arrays struct

我有一个包含字符串数组(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 ...

2 个答案:

答案 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);

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