动态指针赋值c++
Dynamic pointer assignment c++
2。给定定义,
int *p1, *p2;
p1 = new int;
p2 = new int;
以下两项作业有什么区别。
a) p1 = p2;
b) *p1 = *p2
你忘了提到语言,但我猜你指的是C或C++。
a) 简单的地址分段。CCD_ 1将是指向CCD_ 2的指针。因此,您最终会有两个指针指向int的一个实例。这意味着,您通过覆盖p1来释放它的指针,但它的无形部分将留在内存中未被释放,您将无法释放它,甚至无法访问它!(如果你没有在其他地方复制p1
…)用valgrind看看。然而,当您调用delete p1
时,您可以释放由p2
指向的偶数int。p2
的任何使用都可能导致分割错误。
b) 您将p2的值分配给p1,这意味着您最终会得到两个动态分配的指针,这两个指针的值都是p2。但它们将是int的两个不同的独立实例!因此,如果您delete p1
,p2
仍然可以访问。
a)您将p2(这是一个地址)分配给p1。因此,当您取消引用p1时,您将获得与*p2相同的值。如果你改变了*p2,那么*p1也会改变。所以基本上,在这种类型的赋值中,p1和p2都指向相同的地址位置。然而,这将产生内存泄漏,因为分配给p1的地址不再被引用。
b) 在这种情况下,*p2中的值被指定给*p1。但他们仍然指向不同的地址位置。如果在指定后更改*p2的值,则不会更改*p1。
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 非常量变量只读位置的赋值
- 使用赋值运算符重载从类中返回jobject
- C++数据文件、数组和计算赋值
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 全局作用域中函数指针的赋值
- 错误:在为指针赋值时,void值没有被忽略
- 标准库类型的赋值运算符的引用限定符
- 关于 c++ 函数中指针赋值的简单问题
- 复制构造函数、赋值运算符C++
- 标准::变体的赋值运算符
- cin >> int 给定一个字符串将 int 赋值为 0
- if 子句中的赋值不起作用
- 复制包含C++所有元素的对象!(构造函数和赋值,最佳实践?