gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:05:54 25 4
gpt4 key购买 nike

除非我自己不将其指向某处,否则以下指针是否始终为 NULL?

 int* mGlobal = NULL;

或者,即使我已将其设置为 NULL,它是否可以由任何其他进程或 Windows 本身设置?还是只要我一直持有这个指针,它就会一直在我的进程保护内存中?

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

只要我的进程持有它,指针本身就会一直存在,但是在什么情况下我的指针指向的内存会被其他进程或 Windows 更改,而我仍然持有指针?

很多问题,我知道。

最佳答案

Is the following pointer always going to be NULL unless I don't set it pointing somewhere myself?

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

And if I make an array of my pointer allocating some memory on the heap and then deletes it without setting it to NULL afterwards

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

The pointer itself will always be there as long as my process is holding on to it

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

as long as my process is holding on to it

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

关于c++ - 如何在 C++ 和 Windows 中处理我的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21764799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com