读书人

VS2010中编译的一个小疑点

发布时间: 2012-04-05 12:42:40 作者: rapoo

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

读书人网 >C语言

热点推荐