当前位置:  技术问答>linux和unix

如何将void内存块的起始地址放入该内存块的头部??

    来源: 互联网  发布时间:2015-03-19

    本文导语:  143 void mem_init(void *p)     144 {     145   void *p_m;     146   int i,svp=sizeof(p_m);     147   p_m = p;     148      149   //1,头部两个指针的值:     150   *p_m = p;     151    p_m += svp;     152   *p...

143 void mem_init(void *p)
    144 {
    145   void *p_m;
    146   int i,svp=sizeof(p_m);
    147   p_m = p;
    148 
    149   //1,头部两个指针的值:
    150   *p_m = p;
    151    p_m += svp;
    152   *p_m = p;

以上报错为:
udpsrv.cpp:150: `void *' is not a pointer-to-object type
udpsrv.cpp:151: ISO C++ forbids using pointer of type `void *' in 
pointer arithmetic

|
改成
 void mem_init(void *p)
    144 {
    145   int *p_m;
    146   int i,svp=sizeof(p_m);
    147   p_m = (int*)p;
    148 
    149   //1,头部两个指针的值:
    150   p_m[0] = (int)p;
    152   p_m[1] = (int)p;

|
p_m[7]可以,但如果你传近来的p所分配的内存没有这么多的话,就有问题了。
如果只是读p_m[7]则得不到你想要的值。
如果是写p_m[7]则可能造成程序在其它地方非正常退出。

|
不可以,p_m[7]将偏离p_m[0]    7*sizeof(p_m)个字节。

|
其实gcc已经说的很清楚了,  void *不能参加指针的算数操作,比如 ++.--,+5等,因为没有
办法知道增量单位是多少,当你遇到这样的错误时,回去好好检查吧!

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.lang类void的类成员方法: type定义及介绍
  • static void setup_signals __P((void)); 这个__P((void))是什么意思?
  • java命名空间javax.management.openmbean类simpletype<t>的类成员方法: void定义及介绍
  • 线程函数参数怎么void* p接受(void**)&str)???
  • java命名空间javax.lang.model.type枚举typekind的类成员方法: void定义及介绍
  • void(*signal(int signo,void(*func)(int)))(int)又有问题了
  • void(*signal(int signo,void(*func)(int)))(int)
  • 《Linux程序设计》第三版第124页(void)time(&cur_time);这里前面为什么要加个(void)呢?
  • 深入理解void以及void指针的含义
  • typedef void SigHandler (); ??? 帮忙
  • 那位大侠知道gtk+中,(void *)和gpointer 的区别?谢谢
  • 不解:#define SIG_ERR ((void (*)(int))-1)
  • 关于定义void类型的变量的问题,高手请进
  • (void (*) ()) -1;
  • 我声明一个 public void store() 系统说是非法字符 这是什么原因?
  • 关于void*的提问
  • private void arrang(int a[n])这样可以吗,如果不,怎么解决?
  • 请问:fireXXXXX中的fire作何解释?如public void fireListener(ActionEvent e)
  • JAVA语法里的VOID到底怎么用呀?我不知道什么时候加到类或者方法里!?
  • C/C++语言问题:(void) signal(SIGPIPE, pstat); 是什么意思?
  • 问一个很蠢的问题:如:void main(String[] args);为什么一定要带上(如String[] args)参数


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3