VC ++中的指针算术(三重指针赋值)

时间:2012-06-01 14:18:50

标签: c++ visual-c++ pointers nullpointerexception

我的场景如下(VC ++代码):

IDirect3DSurface9 ***ppp;
IDirect3DSurface9* p;

我致电CreateOffscreenPlainSurface( , , ,&p,null),现在p将保留D3D表面的地址。所以我想将p分配给ppp

所以我在做

(*(*ppp)) = p;

但它抛出了运行时异常。我不明白为什么。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

此赋值会抛出异常,因为您正在写入未初始化指针指向的地址。您需要为指向指针数组的指针分配内存,然后再分配给指针数组,然后才能进行赋值。

ppp = new IDirect3DSurface9**[10];  // Pick the right size here
ppp[0] = new IDirect3DSurface9*[5]; // Pick the right size here, too
ppp[0][0] = p;

完成这些数组后,不要忘记delete[]这些数组。

如果使用指向指针的指针不是明确的要求,请考虑使用std::vector<std::vector<IDirect3DSurface9*> >代替。