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

C语言出现munmap_chunk(): invalid pointer错误及signal 6崩溃问题

报错原因与修复方案

munmap_chunk(): invalid pointer 及信号6(SIGABRT)错误均为堆内存操作异常导致,该场景下常见错误原因如下:

  • 给Data结构体的array赋值了栈内存地址,测试用例后续释放array时触发非法释放
  • 申请的array数组长度不足,写入数据时越界破坏了堆内存元数据
  • 返回的Data结构体本身是栈内变量,函数返回后栈地址失效,访问时触发异常

正确实现代码

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

typedef struct Data Data;
struct Data {
     int *array;
     int sz;
};

Data* sqInRect(int lng, int wdth) {
    // 申请Data结构体堆内存
    Data *res = (Data*)malloc(sizeof(Data));
    // 处理长宽相等的边界情况
    if (lng == wdth) {
        res->sz = 0;
        res->array = NULL;
        return res;
    }
    // 先计算需要的数组长度
    int a = lng, b = wdth;
    int len = 0;
    while (a != b) {
        if (a < b) {
            int tmp = a;
            a = b;
            b = tmp;
        }
        len++;
        a -= b;
    }
    len++; // 计入最后剩余的正方形
    // 申请结果数组内存
    res->array = (int*)malloc(sizeof(int) * len);
    res->sz = len;
    // 填充数组内容
    a = lng;
    b = wdth;
    int idx = 0;
    while (a != b) {
        if (a < b) {
            int tmp = a;
            a = b;
            b = tmp;
        }
        res->array[idx++] = b;
        a -= b;
    }
    res->array[idx] = b;
    return res;
}

注意事项

  • 所有需要返回的结构体、数组都必须使用malloc申请堆内存,不能使用栈上的临时变量
  • 测试用例会负责释放返回的array和Data结构体本身,不需要在函数内执行释放操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 13:57:01