Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++删除两次指针 我试图了解更多关于C++指针和释放内存的事情。 假设我们有以下代码 int main{ int * A = new int[4]; int * B = new int[4]; A = B; delete[] A; delete[] B; return 0; }_C++_Pointers - Fatal编程技术网

C++删除两次指针 我试图了解更多关于C++指针和释放内存的事情。 假设我们有以下代码 int main{ int * A = new int[4]; int * B = new int[4]; A = B; delete[] A; delete[] B; return 0; }

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

A指向一个新创建的指针,而B指向另一个指针,所以我们总共有两个指针。 现在说A=B意味着A和B现在指向同一个指针。因此,在这种情况下,另一个指针会发生什么情况?我们如何删除它

因此,在这种情况下,另一个指针会发生什么情况

它丢了。您删除了对数组A的最后一个引用,该数组A指向A,而B不指向指针。它们是指针,它们分别指向数组的第一个元素,即int

我们如何删除它

你不能。内存泄漏了

永远不要使用原始指针。对于动态数组,可以使用std::vector;对于其他数组,可以使用智能指针。使用std::vector,您的代码将是:

#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;