c语言 - 使用 free() 时的"Heap corruption detected"



我对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] = '';
    str_cpy(rev, c);
    printf("Current string is ");
    str_print(c);
    putchar('n');
    free(rev);
}

在这个函数中,我试图反转从sacnf()得到的字符串。当我调试它时,它运行得很好,直到我使用free()的最后一行。我在网上读了一些书,我相信这是我唯一能找到记忆的地方。

帮助?

您正在重写超出数组范围的内容:

rev[len] = '';

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

从而导致未定义的行为。这可能导致元数据损坏,从而导致free()的失败。

此外,不要强制转换malloc()/calloc()等的返回。您还应该检查calloc()是否成功。

当您将len分配给它时,索引从0开始到len-1所以您必须将len+1分配给它,这样您就可以对NULL 使用索引len

最新更新