使用FREE()时检测到堆损坏(&Q) [英] "Heap corruption detected" when using free()

查看:0
本文介绍了使用FREE()时检测到堆损坏(&Q)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对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('
');
    free(rev);
}

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

帮助?

推荐答案

您正在覆盖此处的数组界限:

rev[len] = '';
您仅分配了len个字符。相反,您可以分配len +1个字符。

从而导致undefined behaviour。这可能导致元数据损坏,从而导致free()失败。

也是don't cast the return of malloc()/calloc() etc。您还应该检查calloc()是否成功。

这篇关于使用FREE()时检测到堆损坏(&Q)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆