当前位置: 技术问答>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
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;
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[7]则可能造成程序在其它地方非正常退出。
|
不可以,p_m[7]将偏离p_m[0] 7*sizeof(p_m)个字节。
|
其实gcc已经说的很清楚了, void *不能参加指针的算数操作,比如 ++.--,+5等,因为没有
办法知道增量单位是多少,当你遇到这样的错误时,回去好好检查吧!
办法知道增量单位是多少,当你遇到这样的错误时,回去好好检查吧!