ATL中关于返回对象的有关问题,有时候正确,有时候异常

ATL中关于返回对象的问题,有时候正确,有时候错误。
下面的p 为ATL中记录的一个变量

CComObject<CGeoCamera>* p;

获取接口代码
if(!p)
{
    res = CComObject<CGeoCamera>::CreateInstance(&p);
    //这里进行查询接口  正确
}
else
{
    p->QueryInterface(__uuidof(IGeoCamera), (void**)pVal);  //pVal需要返回的,这里出错。
}

上面的代码,从逻辑上有木有错?错在哪里呢,
我不想每次都进行CreateInstance

------解决方案--------------------
pVal是指针?少了地址符了吧?
p->QueryInterface(__uuidof(IGeoCamera), (void**)&pVal);
------解决方案--------------------
变量没有初始化吧。

CComObject<CGeoCamera>* p = NULL;