如下面:
long *pi;
pi = new long(1000);
long **ppi = π
int i = *pi; //i的值为1000,天啊,怎么可能呢?*pi应是一个指针地址值--(1)若最后一句改为:
int i = *((long*)(*pi)); -------(2)
则报内存非法错误,为什么啊?我认为(1)的做法
是错误的,但(1)偏偏没错,(2)的做法才正确啊,请大家指点。
今天脑子出问题了。
long *pi;
pi = new long(1000);
long **ppi = π
int i = *pi; //i的值为1000,天啊,怎么可能呢?*pi应是一个指针地址值--(1)若最后一句改为:
int i = *((long*)(*pi)); -------(2)
则报内存非法错误,为什么啊?我认为(1)的做法
是错误的,但(1)偏偏没错,(2)的做法才正确啊,请大家指点。
今天脑子出问题了。
解决方案 »
- 服务端能架设在经过路由器的网络里面吗?
- [求助]如何用程序设置屏幕分辨率、亮度、屏幕长度和宽度?
- 线程初学者询问多线程编程问题
- 急!!!!一道数模题
- 关于同时拥有三块网卡电脑,禁用网卡的问题。想了半天都不知如何解决,请高手指教!
- CView类在WINDOWS程序中有什么作用?
- 求教direct show摄像头视频提取问题
- 请,请, 请:工具条上下拉式按钮的问题
- 大家说说经常去的网站是那些啊,当然,关于 vc的,交流交流
- 后台操作mouse ,如何实现SetCursorPos,这样的效果?
- 一个连续发100个数据包造成SOCKET阻塞的问题!!急呀!!
- 刚才那个指向指针的指针问题自己弄错了,请大家回答这个问题,谢谢!
应该是:
int i = *((long*)pi);
int i = *((long*)(*ppi)); (我上面也写错了)
*pi不是指针了,还用long*来强制转换应该错啊
int i = *((long*)pi);
这样应该可以
不过强制转换就多余了
pi本来就是long*的
pi = new long(1000);
int i = *pi; //i的值为1000,天啊,怎么可能呢?*pi应是一个指针地址值--(1)
这样看就清楚了吧,不是什么指针,是pi[0],long型,只不过这里应该是个随机值。(2)*((long*)(*pi));
来分析一下(*pi)是long (参1),
(long*)(*pi)怎么解释?
自己指定的地址吗?
在加个*变成 :*((long*)(*pi)),怎么解释?(long*)(*pi)的地址吗?
好,假设你是要这样的结果。
为什么报错呢?
该地址是虚拟内存中合理的地址吗?是可以访问的范围吗?
int i = *((long*)(*ppi)); -------(2)
哎,今天不在状态。
其实这个问题我是想问SAFEARRAY的问题,如下:
COM服务器中有个函数:
STDMETHODIMP TCoMyCom::QueryName(LPSAFEARRAY* Name)
{
try
{
SAFEARRAY *psa;
psa = SafeArrayCreateVector(VT_BSTR,0,10);
BSTR bstr;
long ix[1];
for(int i = 0;i<10;i++)
{
bstr = BSTR("aaa");
ix[0] = 0;
SafeArrayPutElement(psa,&ix[0],bstr);
SysFreeString(bstr);
}
Name = &psa;
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_ICoQueryDB);
}
return S_OK;
}客户调用时,
LPSAFEARRAY* Name = NULL;
if(SUCCEEDED(pMyInerface->QueryName(Name)) //pMyInerface为得到的接口
{
int i = (*name)->cbElements; //竟报内存错误,为什么呢?
}我是COM菜鸟,请大家指点。
写错误了。
请大家回答我那个COM的问题,
头都大了,
谢谢!
pi = new long(1000);//------------------long[1000]
int i = (int)(*pi);
还有就是不要把long强制转换为int,截断会产生误差的。
>>long 和 int 在win32 下都是 32 bit,不存在截断。
LPSAFEARRAY* Name = NULL;
if(SUCCEEDED(pMyInerface->QueryName(Name)) //pMyInerface为得到的接口
{
int i = (*name)->cbElements; //竟报内存错误,为什么呢?
}
1 首先你要确定 Name 的值 正确。