在对结构体分配的内存进行free时出现,关于 Windows 已在 **.exe 中触发一个断点。其原因可能是堆被损坏.

当在Windows环境下对结构体分配的内存进行释放时,遇到"Windows 已在 **.exe 中触发一个断点。其原因可能是堆被损坏"的问题。文章详细分析了这个问题的原因,是由于在释放内存时,由于结构体嵌套导致的同一块内存被释放两次,从而引发了错误。解决方案包括避免直接使用内部结构体指针或确保只通过外部结构体指针调用释放内存的函数。
摘要由CSDN通过智能技术生成

对于结构体嵌套的结构在用完后free释放时,可能会出现的" Windows 已在 **.exe 中触发一个断点。其原因可能是堆被损坏"问题,

如:

typedef struct{

int k;

int data[100];

}obsd_t;

typedef struct{

int m;

obsd_t  *obs;

}raw_t;


typedef struct{

int n;

raw_t raw

}strfile_t;


可以看出结果提strfile_t中包含结构体raw_t。

由于需要,在同一函数中,定义了结构体raw_t和strfilr_t指正:

raw_t *rawww;

strfile *str;

为对他们分配内存初始化以及释放内存定义函数 init_raw(raw_t *raw);

init_strfile(strfile_t *str);

free_raw(raw_t *raw);

free_strfile(strfile_t *str);


这是问题出现了,在同一个函数,定义两个指针

aw_t *raw;

strfile *str;

并将它们分配内存初始化后,再函数中使用,使用完后将两个结构体指针内存释放并置NULL时:

if(raw!=NULL)

{

free_raw

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值