You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2019下C语言通用插入排序中memcpy后free结构体指针触发Heap corruption问题排查

问题定位与解决

哦,这是个典型的新手容易踩的内存分配小坑!我一眼就发现了问题所在:

你动态分配内存的代码写错了:

char* top_ptr = (char*)malloc(sizeof(width));

这里的sizeof(width)是取**width这个变量的类型(size_t)的大小**,而不是width变量存储的实际值。比如在64位系统中size_t是8字节,32位是4字节——但你需要分配的是和待复制元素大小一致的空间(也就是width参数传入的sizeof(ELEMENT),远大于4/8字节)。

当你执行memcpy(top_ptr, some_valid_pointer, width)时,相当于把远大于分配容量的数据强行写入小内存块,直接破坏了堆的内部元数据,这就是Visual Studio弹出Heap corruption错误的原因。而直接malloc后free没问题,是因为此时堆结构还没被非法写入破坏。

修正方案

把malloc的参数改成width即可:

char* top_ptr = (char*)malloc(width);

另外,建议养成检查malloc返回值的习惯,避免后续操作空指针:

char* top_ptr = (char*)malloc(width);
if (top_ptr == NULL) {
    // 处理内存分配失败的情况,比如返回错误码或终止程序
    perror("malloc failed");
    exit(EXIT_FAILURE);
}

内容的提问来源于stack exchange,提问作者강찬희

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 22:22:36