这段代码引起内存泄漏?

bx2000 2003-09-12 02:31:12
typedef unsigned __int8 uint8_t

在类的构造函数里
for (int ix = 0; ix < 16; ix++)
{
m_data1[ix] = (uint8_t *)malloc(w * h * sizeof(uint8_t));
m_data2[ix] = (uint8_t *)malloc(w/2 * h/2 * sizeof(uint8_t));
m_data3[ix] = (uint8_t *)malloc(w/2 * h/2 * sizeof(uint8_t));
}

溪沟函数这样
for (int ix = 0; ix < 16; ix++) {
if (m_data1[ix] != NULL) {
free(m_data1[ix]);
m_data1[ix] = NULL;
}
if (m_data2[ix] != NULL) {
free(data2[ix]);
m_data2[ix] = NULL;
}
if (m_data3[ix] != NULL) {
free(m_data3[ix]);
m_data3[ix] = NULL;
}
}

上面的代码都执行过了

boundscheck说m_data1,m_data2,m_data3都没释放
...全文
83 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bx2000 2003-09-15
  • 打赏
  • 举报
回复
?
bx2000 2003-09-12
  • 打赏
  • 举报
回复
靠。。有没有搞错
哪里有free []p
free是函数又不是delete操作符
hw110 2003-09-12
  • 打赏
  • 举报
回复
同意了然
softworms 2003-09-12
  • 打赏
  • 举报
回复
翻放数组式变量应该用free []p,而不应该调循环来翻译,机制上的违返。
redby 2003-09-12
  • 打赏
  • 举报
回复
建议你调试跟踪一下,在析构函数中,到底是那些变量没有被释放;也就是哪个变量的free()为执行,这样就可以知道谁出现泄漏,然后在程序里检查
lionqiang 2003-09-12
  • 打赏
  • 举报
回复
同意 bluebohe(薄荷)


bluebohe 2003-09-12
  • 打赏
  • 举报
回复
你有没有直接改动过m_data1[ix]、m_data2[ix]、m_data3[ix]的东西?比如说中间赋过值比如m_data1[ix]=&p等等,这样的话就出问题了
flinming 2003-09-12
  • 打赏
  • 举报
回复
有问题

如果你m_data1刚好为值为0的话,你的内存就没有释放。。。。。。。。。。
kof99th 2003-09-12
  • 打赏
  • 举报
回复
是不是 date1,date2,等本身就是new或malloc出来的,没释放?
bluebohe 2003-09-12
  • 打赏
  • 举报
回复
没问题,这些代码
Cline 2003-09-12
  • 打赏
  • 举报
回复
How do you define "m_data1,m_data2,m_data3"?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧