我在一个类中将一个指针初始化为 NULL。之后我检查它在同一个类中是否为 NULL。但它并不总是 0x0。有时它是 0x8 或 0xfeffffff 或 0x3f800000 或 0x80 或其他奇怪的东西。在大多数情况下,指针为 0x0,但有时它会以某种方式改变。
我确定我不会在我的代码中的任何地方更改它。有没有办法让它“自己”改变?
这是我的代码:
MeshObject::MeshObject()
{
mesh.vertexColors = NULL;
}
MeshObject::MeshObject(const MeshObject &_copyFromMe)
{
SimpleLog("vertexColors pointer: %p", _copyFromMe.mesh.vertexColors);
if (_copyFromMe.mesh.vertexColors != NULL)
{
SimpleLog("vertexColors");
this->mesh.vertexColors = new tColor4i[_copyFromMe.mesh.vertexCount];
memcpy(this->mesh.vertexColors, _copyFromMe.mesh.vertexColors, _copyFromMe.mesh.vertexCount * sizeof(tColor4i) );
}
}
我的应用程序崩溃了,因为 vertexColors 没有被初始化并且正在被复制。但是它是 NULL,不应复制。
谢谢。
最佳答案
这个:
MeshObject::MeshObject(const MeshObject &_copyFromMe)
是一个复制构造函数。因为它是一个构造函数,所以它也应该将 vertexColors 成员设置为某个已知且希望有效的值,但事实并非如此,除非被复制的事物中的值不是 NULL。但是如果它是 NULL 呢?基本上,您的 if() 需要一个 else。
关于c++ - NULL 指针比较失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2561799/