今天发现一个new[]与delete[]百思不得其解的漏洞? 5

我new[]了一个块内存a,然后又new[]了一块内存b,b里面放了一些内容,然后memcpy到a,这时在调试器观察到a与b的内容是一致的。然后delete[]b,这个时... 我new[]了一个块内存a,然后又new[]了一块内存b,b里面放了一些内容,然后memcpy到a,这时在调试器观察到a与b的内容是一致的。然后delete[] b,这个时刻在调试器发现内存块a的一部分内容受到改变!都变成了二进制1。也就是delete[] b影响到了a内存!!!
求大虾讲解?!
图中红色字体表示受到影响的,lpBuffer是我调用这个函数前new的指针。图中,执行完delete[] tempBuffer居然影响到两个内存!
展开
 我来答
pengguismile
2013-07-05 · TA获得超过687个赞
知道小有建树答主
回答量:332
采纳率:100%
帮助的人:124万
展开全部

从运行结果看,a没有被改变呀,第三个while语句显示出的值是正常的,另外,调试器显示也正常。见下图:

说明:指针a指向00491fc0,指针b指向00491da0,执行delete指令后,a指向的内存单元值没有变化。不知楼主从哪里看到变化了,请出图,共同研究一下。

普洛智应
2013-07-04 · 知道合伙人互联网行家
普洛智应
知道合伙人互联网行家
采纳数:410 获赞数:1585
虚拟现实(VR/AR)以及游戏相关技术,物联网以及传感器技术

向TA提问 私信TA
展开全部

不会啊。。。代码贴出看看?还有memcpy是不是拷贝了正确的字节数?

#include <iostream>
#include <string>
using namespace std;
int main(int argc, char** argv)
{
int i = 0;
int* a = new int[10];
int* b = new int[10];
for( i = 0; i < 10; ++i )
b[i] = i;

memcpy(a, b, 10*sizeof(int) );//拷贝多少字节,10个整数那么多
i = 0;
while( i < 10 )
{
cout << a[i]; ++i;
}
cout << endl;
i = 0;
while( i < 10 )
{
cout << b[i]; ++i;
}
cout << endl;

delete[] b;
i = 0;
while( i < 10 )
{
cout << a[i]; ++i;
}
cout << endl;


   return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式