双击删除c++中分配的两个变量
Double delete two allocated variables in c++
我得到了这个代码:
int **a;
int *b;
b = new int;
a = new int*;
*b=10;
a =&b;
std::cout << **a << std::endl;// display 10
如果我这样做:
delete a;
我是否也删除"b"?
delete a;
由于a
没有与new
一起分配,这导致了未定义的行为。
当您第二次分配给a
时,问题才真正开始。
b = new int;
a = new int*;
*b = 10;
a = &b; // oops
此时,您已经丢失了对new
的原始调用所分配的对象的跟踪,该对象最初存储在a
中。所以这是内存泄漏。
您的代码可能应该是这样的:
int *b = new int;
*b = 10;
int **a = &b;
std::cout << **a << std::endl;
delete b;
如果执行delete a
,则会在宇宙结构中撕开一个洞,因为a
不再指向该new int*
,而是指向未动态分配的b
。
b是动态分配的(b=new int;(然后我们将10存储到分配的int.中
然后,我们为指向int的指针分配一个指针"a"。但随后分配给"a",这意味着我们失去了"a"所指的内容。当我们删除时,我想你会得到一个错误,因为它不再指向在动态分配的存储器处。
也许你的意思是*a=b
在这种情况下,您仍然需要删除a和b
重新表述您的问题和代码:
int * b = new int; // Dynamically allocate for 1 integer.
int * * a = new int *; // Allocate 1 pointer dynamically.
// The tricky part to understand.
// The variable `a` points to a pointer.
// So dereferencing 'a' results in a pointer to an integer.
// So, assign the pointer, in dynamic memory, with the content
// of the 'b' pointer.
*a = b;
// What does this statement do?
delete a;
在上面的示例中,delete
释放为a
变量分配的内存。没有更多,没有更少。
指针b
不受影响。它仍然指向为整数分配的内存。
a
的内存解除分配不会影响b
,因为解除分配函数不会对已分配内存的内容进行操作。
是。它删除了b
指向的对象。CCD_ 16和CCD_。为了确保a
和b
没有被不当使用,请尝试添加以下内容:
a=NULL;
b=NULL;
相关文章:
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 命令行参数,cant 或两个变量
- 在 for 循环中更新两个变量时遇到问题C++
- C++ 编译时在两个变量之间交替
- C++ 如何在包含两个变量的结构中存储与变量不同数量的值?
- 为什么一个接一个声明的两个变量在内存中不相邻?
- 为什么动态分配的两个变量的内存位置不是连续的?
- 是否可以在C++中使用宏交换两个变量的出现?
- 计算机如何分配两个变量,我们如何计算两个变量之间的距离?
- 正确证明C 中的两个变量合理(我想将它们视为一个变量)
- 可视C 编译器将相同的存储位置提供给两个变量
- 尝试使用 {} 和 std::make_pair() 交换两个变量时的行为不同
- 在rootframework中的根文件中编写两个变量
- 最短路径,带有两个变量
- 加入两个变量和LCD打印
- 在循环中声明两个变量以逆转字符串?在C 中
- 具有两个变量的"for"循环,一个变量每次迭代递增,每隔一次迭代递增
- 如何在C++中使用一个类中两个变量的值
- 仅在C 中的一个变量上,两个变量函数的数值集成(使用数值配方库)
- 如何在我存储的两个变量之间生成随机数