new申请到的内存除了delete,还有哪些方法让内存消失

TG1005 2006-05-02 10:45:41
代码如下:
void DeCodePackages()
{
int i = 0;
BYTE* p1;
BYTE* p2;
BYTE* p3;
while ( Buf_Array[i] )
{
p1 = Buf_Array[i];
if( *(p1+4) == 0x78 )
{
p2 = new BYTE [ *(DWORD*)p1 + 20 ];

CopyMemory( p2, &Buf_DeCode[0], sizeof(Buf_DeCode) );
CopyMemory( (p2+8),p1,4 );
CopyMemory( p2+20 ,p1+4, *(DWORD*)p1 );
p3 =(BYTE*) DeCode( (DWORD)p2 ); //解密后的缓冲区没有释放
CopyMemory( p3+16,p3+8,4 );
p1 = new BYTE [ *(DWORD*)(p3+8) + 4 ];

CopyMemory(p1,p3+16,*(DWORD*)(p3+8) + 4);
delete [] Buf_Array[i];
Buf_Array[i] = p1;
delete [] p2;
}
i++;
}
}
Buf_Array是一个指针数组,用OD调试,在Buf_Array[i] = p1;这里下断点,一个一个观察,发现完全正常,Buf_Array里的指针指向的缓冲区都是存在的
如果我不下断点,直接对Buf_Array观察发现总有几个指针指向的缓冲区消失了,这BUG真奇怪
...全文
292 12 打赏 收藏 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
TG1005 2006-05-03
  • 打赏
  • 举报
回复
这BUG太诡异了,只要不下断点他就出现,下了断点他永远不出现
TG1005 2006-05-03
  • 打赏
  • 举报
回复
经过跟踪,发现内存消失不是在void DeCodePackages()函数内,而是在别的地方,这就说明不是用delete删除的,因为别的地方没有delete代码,难道除了delete还有别的可以释放delete生成的内存。。。
TG1005 2006-05-03
  • 打赏
  • 举报
回复
这是OD的BUG,汗
_Li_ 2006-05-02
  • 打赏
  • 举报
回复
和printf用法一样
int i=1;
TRACE("%d\n", i);
TG1005 2006-05-02
  • 打赏
  • 举报
回复
TRACE没用过,能写个简短的例子吗
_Li_ 2006-05-02
  • 打赏
  • 举报
回复
如果是这样,那就不好调了,建议你再循环中加入
TRACE( Buf_Array[i]指向的内容的代码 );
如果缓冲区真的没有了,会抛出异常的
TG1005 2006-05-02
  • 打赏
  • 举报
回复
不存在越界情况,这样会导致DeCode函数调用失败
就算CopyMemory时发生越界,比如把p3指向的缓冲区拷贝到p1,也不可能导致内存消失
new申请内存也都成功了,Buf_Array里面的指针都不是0
TG1005 2006-05-02
  • 打赏
  • 举报
回复
指针没变成NULL,而是指针指向的缓冲区消失了,比如Buf_Array[1] = 0x0900000,
0x09000000指向的缓冲区却没有了,用Ollydbg的话就是:指定地址处没内存
_Li_ 2006-05-02
  • 打赏
  • 举报
回复
p2 = new BYTE [ *(DWORD*)p1 + 20 ];
p1 = new BYTE [ *(DWORD*)(p3+8) + 4 ];

建议楼主将这两块内存分配的大些再调试一下,如果没有问题,说明你分配的空间不够,或者是
CopyMemory时发生越界。

TG1005 2006-05-02
  • 打赏
  • 举报
回复
如果只有delete,可我的代码没错
我工程里只有上面这段代码里有delete
_Li_ 2006-05-02
  • 打赏
  • 举报
回复
哦,对不起,刚才没仔细看你的问题,你指的缓冲区消失是什么意思?是指针变成NULL,还是什么?
_Li_ 2006-05-02
  • 打赏
  • 举报
回复
new申请的内存,必须用delete释放,
malloc申请的,必须用free释放,
否则运行结果是不可预测的。
内容概要:本文研究了面向复杂海洋环境的无人水面艇(USV)编队控制问题,提出了一种双层模型预测控制(MPC)理论与鲁棒协同控制方法。上层负责编队构型的优化与全局路径规划,通过求解优化问题实现多艇协同构型的动态调整;下层基于非线性MPC框架实现各无人艇的运动控制与精确轨迹跟踪,充分考虑了系统动力学约束、外部环境干扰(如风浪流)及模型不确定性。通过引入鲁棒控制策略,增强了系统在复杂动态海洋环境下的抗干扰能力与控制稳定性。研究在Matlab平台上完成了算法的完整代码实现与仿真验证,结果表明所提方法能够有效实现多艇在复杂环境下的高精度、强鲁棒性协同编队控制。; 适合人群:具备自动控制、机器人、海洋工程或相关专业背景,熟悉Matlab/Simulink仿真工具,从事多智能体协同控制、无人系统自主导航或模型预测控制算法研究的研发人员与研究生。; 使用场景及目标:①为无人水面艇在复杂、动态、不确定的海洋环境下执行编队任务提供先进的控制理论与技术方案;②通过完整的Matlab代码实现,方便研究人员复现、验证、改进双层MPC与鲁棒协同控制算法;③促进模型预测控制与鲁棒控制理论在多智能体系统、无人装备协同作业等领域的深度融合与应用发展。; 阅读建议:建议读者结合提供的Matlab代码,深入剖析双层控制架构的设计逻辑、MPC优化问题的构建过程以及鲁棒性处理机制的具体实现,重点关注算法如何处理模型误差、外部干扰和系统硬约束,以全面掌握其在复杂场景下的工程应用潜力。

16,550

社区成员

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

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

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