问题描述
我有一个由 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 (将#修改为@)