释放后堆已损坏 C

问题描述

我有一个由 2 个指针组成的结构(如下所示),这意味着 8 个字节。

struct DNS_query
{
    uint8_t* name;
    DNS_question* question;
};

这意味着,当我在堆中分配位置时,我分配了 8 * 。然后我遍历数组并更改指针的值,所以它仍然是 8 个字节,但是当我尝试释放内存时,我收到错误“CRT 检测到应用程序在堆缓冲区结束后写入内存”。

    DNS_query* query = (DNS_query*)malloc(ntohs(dns.questions) * sizeof(DNS_query));

    for (int i = 0; i < ntohs(dns.questions); i++)
    {
        query[i].name = (uint8_t*)&qDNS[sizeof(IP_header) + sizeof(UDP_header) + sizeof(DNS_header) + sizeof(DNS_query) * i];
        query[i].question = (DNS_question*)&raw_packet[sizeof(DNS_header) + (strlen((const char*)query[i].name) + 1)];
    }

    free(query);

这是否意味着我更改了超过 8 个字节,如果是,如何更改?

这当然只是代码的一部分,但却是困扰我的部分

编辑: 该应用程序在 32 位系统上运行。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...