2014-02-13 37 views
0

下面的指针总是会为NULL,除非我不把它指向我自己的某处?我的指针将如何处理在C++和Windows中处理?

int* mGlobal = NULL; 

或者,难道是任何其他进程或由Windows本身即使我已经将它设置为NULL一些理由来设置。或者,只要我坚持这个指针,它总是会在我的进程受保护的内存中?

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

只要我的进程持有它,指针本身就会一直存在,但在我仍然坚持使用其他进程或Windows时,我的指针所指向的内存会在哪种情况下被更改指针?

我知道很多问题。

回答

1

下面的指针总是会变成NULL,除非我没有把它指向我自己的某个地方?

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

如果我让我的指针在堆上分配一些内存的数组,然后将其删除没有设置它,如果你有新的分配内存和以后删除它以事后NULL

,将其设置为NULL或以其他方式不会影响它在删除之前指向的内存。所以如果我理解你的问题,那么在这种情况下没有什么区别但将它设置为NULL(nullptr)是一种很好的做法。最好还是使用智能指针。

指针本身总是存在的,只要我的过程是抱着它

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

只要我的过程是抱着它

通常你不会想到在进程,甚至线程,但范围而言。如果上面的变量是在类之外声明的(正如名字所暗示的那样),那么它就具有程序范围。这种全局变量被认为是不好的做法。