我无法尝试释放malloc内存块。 基本上我正在尝试创建一个字符串数组,如下所示:
char **list;
list = malloc(total_num_elements * sizeof(char*));
for (i = 0; i < total_num_elements; i++) {
list[i] = malloc((str_len + 1) * sizeof(char));
}
然后使用以下函数调用和原型将其发送到生成字符串排列(第一个参数)的递归函数:
recurse(str, 0, str_len, &list);
recurse(char *str, int start, int end, char ***list);
递归函数的相关片段是基本情况:
if (start == end) {
strcpy((*list)[counter], str);
counter++;
}
计数器只是我为方便起见而使用的一些全局变量。你可以告诉我,我试图将排列存储到列表中。
当我尝试通过
释放程序结束时的所有内容时 for (i = 0; i < total_num_elements; i++) {
free(list[i]);
}
free(list);
一切都很好,花花公子,但是一旦我调用声明并再次分配列表的函数,整个事情就会爆炸。摆脱free()语句摆脱了段错误,但我在列表中存储了明显的乱码结果。
我错过了什么?我尝试使用for循环手动将str的内容复制到列表中,并且错误仍然存在(如预期的那样)。所有字符串都以空值终止。