当删除或删除[]被执行时,计算机会做什么?
What does computer do when delete or delete[] is excuted?
那里!我是 c++ 的新手,遇到了删除指向数组的指针的问题。如果您搜索"如何正确删除指向数组的指针",之前也有类似的问题。它的结论是,坚持使用new
和delete
是一个好习惯。如果你用new <data-type> []
来分配妈妈,delete[]
应该随之而来。
我对这个答案不满意。当delete
或delete[]
被执行时,计算机会做什么?所以,我试过这个。
#include <iostream>
using namespace std;
int main()
{
int* pvalue = NULL;
pvalue = new int[3];
cout << "address of pvalue:" << pvalue << endl;
for (int i = 0; i < 3; ++i)
{
*(pvalue+i) = i+1;
}
for (int i = 0; i < 3; ++i)
{
cout << "Value of pvalue : " << *(pvalue+i) << endl;
}
delete pvalue;
cout << "address of pvalue:" << pvalue << endl;
for (int i = 0; i < 3; i++)
{
cout << "Value of pvalue : " << *(pvalue+i) << endl;
}
return 0;
}
输出为:
address of pvalue:0x150e010
Value of pvalue : 1
Value of pvalue : 2
Value of pvalue : 3
address of pvalue:0x150e010
Value of pvalue : 0
Value of pvalue : 0
Value of pvalue : 3
该指针的地址没有像我预期的那样NULL
,并且只删除了两个值。 如果我将delete pvalue
替换为delete [] pvalue
,我希望数组的所有三个值都被删除。但是,结果是一样的。
delete pvalue
是否告诉计算机此地址是免费的 在其他地方使用,实际上不会更改地址 pvalue 成立?delete pvalue
或delete [] pvalue
是否会更改指针指向的值?delete pvalue
和delete [] pvalue
有什么区别?似乎他们的行为是一样的。
- "delete pvalue"是否告诉计算机此地址可以在其他地方免费使用,并且实际上并没有更改该地址 pvalue 持有?
是的。 正是这个。
">
- 删除 pvalue"或"delete [] pvalue"是否会更改指针指向的值?
在您展示的非常简单的情况下,没有。 通常,将调用指向值的析构函数。 这可能会也可能不会更改值。 最后(这很重要),有效的C++程序无法分辨 - 一旦你调用了delete
,检查值是未定义的行为。 (未定义的行为意味着任何事情都可能发生 - 包括"你错误地期望什么"。
- pvalue"和"删除 [] pvalue"有什么区别?似乎他们的行为是一样的。
区别在于new
分配的内存必须由delete
删除,而new[]
分配的内存必须由delete[]
删除。 对于某些实现,根本没有区别。 对于其他人,在new[]
分配的内存上使用delete
将无法运行析构函数。 对于其他人,您的程序可能会停止。
"delete pvalue"是否告诉计算机此地址可以在其他地方免费使用,并且实际上并没有更改该地址 pvalue 成立?
是的
">删除 pvalue"或"delete [] pvalue"是否会更改指针指向的值?
它可以调用对象/对象的析构函数
"删除pvalue"和"删除 [] pvalue"有什么区别?似乎他们的行为是一样的。
一个删除一个对象,另一个删除对象数组。
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 如何通过 getter 函数删除矢量的元素?
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 从控制台中删除最后打印的元素
- 如何删除本地计算机注册表项
- 使用删除会使我的计算机崩溃