堆被破坏

19 篇文章 0 订阅

void CDlgConfig::CalcMap(void)
{
	m_pXofs = new int[m_dst->width];
	m_pYofs = new int[m_dst->height];
	double ifx = 1./inv_scale_x, ify = 1./inv_scale_y;
	int x ,y;
	// dst中位置对应src中的位置
	for( x = 0; x < m_dst->width; x++ )
	{
		int sx = saturate_cast<int>(x*ifx);
		m_pXofs[x] = std::min(sx, m_src->width-1);
	}
	for( y = 0; y < m_dst->height; y++ )
	{
		int sy = saturate_cast<int>(y*ify);
		m_pXofs[y] = std::min(sy, m_src->height-1);
	}

	// src 中的位置,对应dst的位置
	 // saturate_cast<int> std::min(x*inv_scale_x,m_dst->widht-1)

}





原因:

m_pXofs[y] = std::min(sy, m_src->height-1);
错误。y大于了 new int[] 分配的值。从而破坏了堆


问题的发现受http://zhidao.baidu.com/link?url=OV_SX1Iq7gA1LgQtSLU3w_Tl0a_4RpXtmTuyZfnbAv4ZPI87Lp8-l5o3SzBtSGNzi8aZx7lm5BDwtxQp4w1j1a 启发

从目前的代码看,应该就是以下问题了
从你的方法void Read1(int * data, long n);分析讨论
由于这个方法的第一个参数是data并非为const,也就是执行完这个函数后,main中data与Read1中的地址相同,到此时还未问题
由于没有给出Read2、Read3、Read5,无法判断,LZ可以自己看看这些函数
因为main中int * data=new int[n];即只分配了n个int大小的内存

如果在Read2、Read3、Read5执行后,数组变大了,就会出现这种问题



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值