c - 释放 C 中结构内的 char 数组

标签 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 ...

最佳答案

在分配数组中的字符串时,

malloc(sizeof(str))

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

malloc(strlen(str) + 1)

为字符串中的字符加上终止空值分配足够的空间。

关于c - 释放 C 中结构内的 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21495330/

相关文章:

inheritance - 如何将 'child' 结构传递给接受 'parent' 结构的函数?

c++ - C(++) 结构力额外填充

c - Realloc 读取 C 中的大文本文件

带参数调用Linux服务

c - 在C中通过地址传递struct-within-pointer-array-within-struct

javascript - 为什么我不能在一个对象内的数组中展开,而该对象具有被过滤的同一级别的另一个对象

c - 刷新容器中的子项 - GTK

java - 实例化泛型类的 JAVA 数组

c# - 我如何判断 int[] 是否尚未分配任何内容?

c# - C 的内联匿名结构定义是否有等效的 C# 语法?