在C++和Windows中如何处理我的指针

How is my pointer going to be handled be handled in C++ and Windows?

本文关键字:处理 我的 指针 何处理 C++ Windows      更新时间:2023-10-16

下面的指针是否总是为NULL,除非我自己不设置它指向某个地方?

int* mGlobal = NULL;

或者,它可以由任何其他进程设置,也可以由Windows本身出于某种原因设置,即使我已将其设置为NULL。还是只要我抓住这个指针,它就会一直在我的进程保护内存中?

如果我制作一个指针数组,在堆上分配一些内存,然后删除它而不将其设置为NULL,那么它所指向的地址将对任何其他进程或Windows免费使用?在这种情况下,删除后不设置或设置为NULL有区别吗?

只要我的进程抓住指针,指针本身就会一直存在,但在什么情况下,当我仍然抓住指针时,指针指向的内存会被其他进程或Windows更改?

我知道很多问题。

除非我自己不设置它指向某个地方,否则下面的指针总是为NULL吗?

是。指针本身使用的内存不会改变。目前它没有指向任何东西,因为它是NULL。如果您使用的是c++11,请使用nullptr。

如果我在堆上创建一个指针数组,分配一些内存,然后在之后删除它而不将其设置为NULL

如果使用new分配内存,并在以后将其删除,则将其设置为NULL或以其他方式不会影响删除前所指向的内存。所以,如果我理解你的问题,在这种情况下没有区别。但最好将其设置为NULL(nullptr)。最好还是使用智能指针。

只要我的进程保持,指针本身就会一直存在

如果将指针变量作为引用或指针传递并通过该引用或指针进行更改,指针变量本身可能会发生更改,但通常情况下不会发生更改。在正常情况下,它所指向的内存可以通过指向同一内存的另一个指针进行更改。它通常不会被其他进程更改。如果你选择这样做,它可以传递给其他线程。我没有考虑过深奥的情况。

只要我的流程保持

通常情况下,您不会考虑进程,甚至线程,而是考虑范围。如果上面的变量是在类之外声明的(顾名思义),那么它就具有程序作用域。这样的全局变量被认为是不好的做法。