使用 free() 时“检测到堆损坏”

2024-01-28

我对 C 还很陌生(这实际上是我第一次使用指针进行作业),我无法弄清楚这个错误......

这是我的代码:

void str_rv(char c[]) {
    int i, len = str_ln(c);
    char *rev = (char*)calloc(len, sizeof(char));

    check_mem(rev);

    for (i = 0; i < len; ++i) {
        rev[i] = c[len - (i + 1)];
    }

    rev[len] = '\0';
    str_cpy(rev, c);

    printf("Current string is ");
    str_print(c);
    putchar('\n');
    free(rev);
}

在这个函数中,我试图反转我得到的字符串sacnf()。 当我调试它时,它运行良好,直到我使用的最后一行free()。我在网上读了一些内容,我确信这是我尝试释放这段记忆的唯一地方。

Help?


您在此处覆盖超出数组范围:

rev[len] = '\0';

您只分配了len字符。相反,你可以分配len +1 chars.

从而造成未定义的行为 http://en.wikipedia.org/wiki/Undefined_behavior。这可能导致元数据损坏,从而导致free()的失败。

Also, 不要投射返回malloc()/calloc() etc http://c-faq.com/malloc/cast.html。您还应该检查是否calloc()成功了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 free() 时“检测到堆损坏” 的相关文章

随机推荐