C++删除两次指针 我试图了解更多关于C++指针和释放内存的事情。 假设我们有以下代码 int main{ int * A = new int[4]; int * B = new int[4]; A = B; delete[] A; delete[] B; return 0; }
A指向一个新创建的指针,而B指向另一个指针,所以我们总共有两个指针。 现在说A=B意味着A和B现在指向同一个指针。因此,在这种情况下,另一个指针会发生什么情况?我们如何删除它 因此,在这种情况下,另一个指针会发生什么情况 它丢了。您删除了对数组A的最后一个引用,该数组A指向A,而B不指向指针。它们是指针,它们分别指向数组的第一个元素,即int 我们如何删除它 你不能。内存泄漏了 永远不要使用原始指针。对于动态数组,可以使用std::vector;对于其他数组,可以使用智能指针。使用std::vector,您的代码将是:C++删除两次指针 我试图了解更多关于C++指针和释放内存的事情。 假设我们有以下代码 int main{ int * A = new int[4]; int * B = new int[4]; A = B; delete[] A; delete[] B; return 0; },c++,pointers,C++,Pointers,A指向一个新创建的指针,而B指向另一个指针,所以我们总共有两个指针。 现在说A=B意味着A和B现在指向同一个指针。因此,在这种情况下,另一个指针会发生什么情况?我们如何删除它 因此,在这种情况下,另一个指针会发生什么情况 它丢了。您删除了对数组A的最后一个引用,该数组A指向A,而B不指向指针。它们是指针,它们分别指向数组的第一个元素,即int 我们如何删除它 你不能。内存泄漏了 永远不要使用原始指针。对于动态数组,可以使用std::vector;对于其他数组,可以使用智能指针。使用std::ve
#include <vector>
int main{
auto A = std::vector<int>(4);
auto B = std::vector<int>(4);
A = B;
}
PS:我知道这种观点在那些想学习的人中很受欢迎,但是对于C++中的原始指针,你最需要知道的最重要的事情是,你几乎不需要它们,当你认为你需要它们时,很可能你仍然没有。
这里没有什么特别的指针。
int i = 3;
i = 4;
3号发生了什么事?它消失了,被i=4覆盖。指针也是这样:
int *p = new int[4];
int *q = new int[4];
p点在int数组中,q点在int数组中
p的旧值消失,被p=q覆盖。p和q现在持有相同的指针值,指针指向第二次调用newint[4]所分配的内存
要释放第一次调用new int[4]时分配的内存,您必须保留new返回的指针。1它将永远丢失,2您不能。P.S.A和B指向的不是同一个指针。@SamVarshavchik他们指向的是什么?A=B;并删除[]A;应该交换语句以避免内存泄漏。它们指向INT。它们没有指向另一个指针。@HasanH即使这样,您也不应该使用new;。如果您需要,智能指针可以访问它们管理的指针非常感谢您的解释。这已经足够了
int *p = new int[4];
int *q = new int[4];
p = q;