尝试释放malloc内存(和指针)时的Segfault

时间:2014-01-26 13:36:48

标签: c segmentation-fault malloc free

我无法尝试释放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的内容复制到列表中,并且错误仍然存​​在(如预期的那样)。所有字符串都以空值终止。

0 个答案:

没有答案