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

VS2010中编译的一个小疑点

2012-04-05 
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字节的内存,自然越界出错

热点排行