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

C语言指针问题:getDataAlt函数触发double free错误求助

C语言跨文件指针内存分配触发Double Free错误的解决方法

你的代码逻辑本身没问题,但test.c文件缺少必要的标准库头文件,这是导致double free的核心原因:

在test.c中,你调用了malloc和sprintf,但没有包含<stdlib.h>和<stdio.h>。C语言中,如果函数没有显式声明,编译器会默认它返回int类型。在64位系统下,int是32位,而指针是64位,malloc返回的64位内存地址会被截断成32位的int,再转换为char*时,地址已经被破坏。后续free这个损坏的指针时,就会触发内存错误(表现为double free或者无效指针访问)。

而main.c里的getData函数能正常运行,是因为main.c已经包含了<stdlib.h>和<stdio.h>,编译器能正确识别malloc和sprintf的函数签名。

修复步骤

修改test.c,添加缺失的头文件:

#include "test.h"
#include <stdlib.h>  // 提供malloc、free的声明
#include <stdio.h>   // 提供sprintf的声明

重新编译运行后,free(anOtherAlt)就不会再触发double free错误了。

额外建议

  • 编译时开启高等级警告(比如MingW的-Wall -Wextra),编译器会直接提示你“隐式声明函数malloc”这类问题,能快速定位这类低级错误。
  • 给malloc添加失败检查,避免内存分配失败导致后续逻辑崩溃:
void getDataAlt(char** dst) {
    char* tmp = malloc(sizeof(char) * 50);
    if (tmp == NULL) {
        *dst = NULL;
        return;
    }
    sprintf(tmp, "This is a test.\r\n");
    *dst = tmp;
}

内容的提问来源于stack exchange,提问作者BagOfTricks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:02:48