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

VC++ 内存储器的读写

2013-08-04 
VC++内存的读写如何直接对内存进行读写?int*p(int*)malloc(sizeof(int)*4)ZeroMemory(p, sizeof(int)*4)

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

跪求错在哪里?

[解决办法]
引用:
Quote: 引用:

第一个问题,读取指针数据要解参考,所以要用_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));

问题一:int*p=(int*)malloc(sizeof(int)*4); 您的意思是 这样申请的内存不是保证能连续的吗?有没有办法保证其内存都是连续的?
问题二:怎样读取内存数据,将buf1 转化为int[]?
谢谢!!!  大侠

抱歉,是我弄错了,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; 
}

热点排行