【发布时间】:2015-03-25 12:08:19
【问题描述】:
指向对象的指针被设置为 NULL,尽管函数中的任何地方都没有 pointerToObj = NULL。后来我将该指针用于某些东西,它会导致访问冲突异常。我还添加了一个测试指针以查看它是否会保留其值,但不会 - 两者同时设置为 NULL。
指针指向向量中的一个对象。有一次,我向向量添加了一个新对象,因此结构增长了。在此之后,指针被设置为 NULL。我对此进行了测试 - 所有指向向量特定元素的指针,在我添加新对象后立即设置为 NULL。
我怀疑这是因为向量的工作方式造成的——如果我没记错的话,它们是基于堆栈的。当堆栈必须自己加长时,它必须将自己复制到一个更大的新数组中并删除旧数组。但是现在新数组位于内存中的其他位置,所以我的指针不再指向正确的位置。
真的是这样吗?
【问题讨论】:
-
std::vector不像您描述的那样工作,即外部指针设置为 NULL。您需要发布此行为的代码。 -
您是否验证过指针实际上设置为
NULL? 如何?(最小代码示例?)虽然取消引用空指针会导致访问冲突(在 Windows 上),但反之则不然。所有无效指针都会发生访问冲突,而不仅仅是空指针。
标签: c++ arrays pointers vector