首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

memcpy越界拷贝,会导致崩溃,但具体原因是什么?解决思路

2012-04-04 
memcpy越界拷贝,会导致崩溃,但具体原因是什么?void main(){char* p NULLp (char*)malloc(10)char* p

memcpy越界拷贝,会导致崩溃,但具体原因是什么?
void main()
{
char* p = NULL;
p = (char*)malloc(10);
char* ps = (char*)malloc(10000);
memcpy(p,ps,1000);

free(p);

}

我这段越界拷贝,会导致崩溃,我的疑问是:p 和 ps 分配空间,无论你往里面拷贝什么,都是2进制的数值,free释放的时候它自己知道分配了多大空间,也会自己释放多少的空间,按道理是不会有问题的,但为什么在VS2005下 却会崩溃,其他编译器我没试过,按道理应该也有崩溃吧,, 求原因.

[解决办法]
给你举个例子:
比如《********123456》其中“*”部分是分给你的(malloc),因为给只要了10个,所以只给你10个,可能会多给你空出来预备的几个,但不会空出太多,当你memcpy(p,ps,1000)时,就会把后面的"123456"等覆盖,这些被你覆盖的可能是某个函数的返回地址,可能是某个变量的值,你不应该访问的,但你却修改了,你说会不会有问题
[解决办法]
“内存越界访问有两种:一种是读越界,即读了不属于自己的数据,如果所读的内存地址
是无效的,程度立刻就崩溃了。如果所读内存地址是有效的,在读的时候不会出问题,但由
于读到的数据是随机的,它会产生不可预料的后果。另外一种是写越界,又叫缓冲区溢出。
它会产生不可预料的后果,比如把程序返回地址改掉了,使函数返回时跳到未知内存,导致崩溃。”

热点排行