VS2010中编译的一个小疑点
VS2010中编译的一个小问题环境VS2010,WIN7。一下代码:C/C++ code#include stdio.h#include string.h#in
VS2010中编译的一个小问题
环境VS2010,WIN7。
一下代码:
C/C++ code#include "stdio.h"#include "string.h"#include "stdlib.h"#include "malloc.h"void swap( void *vp1,void *vp2 );void main(void){ double a=1.25; double b=3.14; swap( &a,&b ); printf( "a=%f and b=%f\n",a,b );}void swap( void *vp1,void *vp2 ){ char *buffer; buffer = (char *)malloc( _MAX_PATH ); memcpy( buffer,vp1,_MAX_PATH ); memcpy( vp1,vp2,_MAX_PATH ); memcpy( vp2,buffer,_MAX_PATH );}
编译通过,运行出错,错误提示是:Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.
请问这是什么意思?
[解决办法]memcpy( buffer,vp1,_MAX_PATH ); vp1没_MAX_PATH这么大
[解决办法]swap里memcpy的时候溢出了吧,为什么用_MAX_PATH?
[解决办法]LZ对memcpy函数不够熟悉,void *memcpy( void *dest, const void *src, size_t count );第一参数是目标地址、第二个参数是源地址,第三个参数是内存拷贝的大小。
在这句中:memcpy( buffer,vp1,_MAX_PATH ); vp1指向一个double型,长度是8,而_MAX_PATH为260,从一个double类型的数据下拷贝260字节的内存,自然越界出错