VC++ 内存的读写
如何直接对内存进行读写?
int*p=(int*)malloc(sizeof(int)*4);
ZeroMemory(p, sizeof(int)*4);
//int *p=NULL;
*p=123;
char buf[30];
_snprintf(buf,29,"%d",p);buf[29]=0;
for(int i=0;i<4;i++)
{
memcpy((int*)p+i,p,sizeof(int)*4);
}
static char buf1[30];
_snprintf(buf1,29,"%d",p);buf1[29]=0;
free(p)
buf 应该是123;
buf1 应该是123123123123123;
但实际上buf 566294,buf1 是0000000
跪求错在哪里?
[解决办法]
抱歉,是我弄错了,malloc申请的内存逻辑上是连续的
[解决办法]
第一个问题,读取指针数据要解参考,所以要用_snprintf(buf,29,"%d",*p);
然后memcpy时源数据和目标地址都是int型,大小就是sizeof(int);
对于buf1,最初申请内存是动态申请的,内存不一定连续,即时内存连续,也无法都按int一次性读出,而*p只会将第一位的数据读出,想全部按照int格式读出就要多写几个%d,_snprintf(buf1,29,"%d%d%d",*p,*(p+1),*(p+2));
#include <iostream>
using namespace std;
int main()
{
int*p=(int*)malloc(sizeof(int)*4);
memset(p, 0, sizeof(int) * 4);
*p=123;
char buf[30];
_snprintf(buf,29,"%d",*p);
cout<<buf<<endl;
for(int i=0;i<4;i++)
{
memcpy(p+i,p,sizeof(int));
}
static char buf1[30];
_snprintf(buf1,29,"%d%d%d%d",*p, *(p+1), *(p+2), *(p+3));
cout<<buf1<<endl;
free(p) ;
system("pause");
return 0;
}