判断delete [ ]p;释放指针变量p指向的内存,同时p也被删除
时间: 2024-01-27 16:03:05 浏览: 66
判断错误。使用 `delete [] p;` 释放指针变量 `p` 指向的内存时,只会释放内存块,而不会删除指针变量 `p` 本身。指针变量 `p` 仍然存在于内存中,但是它所指向的内存块已经被释放,不能再访问。
在 C++ 中,使用 `new` 运算符动态申请内存时,需要手动使用 `delete` 运算符释放内存,否则会造成内存泄漏。如果使用 `new[]` 运算符申请了一个数组内存块,则需要使用 `delete[]` 运算符释放内存。
例如,下面的代码申请了一个整型数组的内存块,并将返回的指针赋给指针变量 `p`:
```cpp
int* p = new int[10];
```
在使用完 `p` 指向的内存块后,需要使用 `delete[]` 运算符释放内存:
```cpp
delete[] p;
```
这里的 `delete[] p;` 会释放 `p` 指向的内存块,但是不会删除指针变量 `p` 本身。指针变量 `p` 仍然存在,但是它所指向的内存块已经被释放,不能再访问。如果想要删除指针变量 `p` 本身,可以使用 `delete p;`,但是这只适用于使用 `new` 运算符申请单个内存块的情况,不能用于释放使用 `new[]` 申请的数组内存块。
相关问题
在程序中创建一个指针变量,并通过 new 运算符为其分配动态内存。 在使用完指针变量后,需要使用 delete 运算符释放指针变量所指向的动态内存。
是的,这是使用 new 运算符动态分配内存时需要遵循的基本规则。当我们使用 new 运算符动态分配内存时,会返回一个指向动态分配内存的指针。我们需要将这个指针保存下来,并在使用完这段内存之后,使用 delete 运算符将其释放。
动态分配内存可以帮助我们在程序运行时动态地管理内存,提高程序的灵活性和效率。但是,在使用动态分配内存时,一定要注意及时释放内存,避免内存泄漏问题。同时,也要注意对内存释放的顺序和方式,避免出现野指针等问题。
关于new 和 delete 关键字功能的叙述,不正确的是( ) A. C++程序的内存空间,可以分为代码区(text segment)、静态存储区(Data Segment)、栈区(Stack)、堆区(Heap)。new关键字用于从堆区中动态申请创建对象所需的内存空间。 B. new动态申请内存空间成功后,返回该内存区域的首地址;同时,也会自动调用相关类的构造函数。 C. delete用于删除new建立的对象,并释放指针所指向的内存空间,同时,也会自动调用对象的析构函数。 D. B * ptr=new B(5);delete ptr; 假设上述语句中,new申请的内存空间首地址为Addr,存放ptr指针变量值的内存空间首地址为 PAddr,则执行delete ptr 语句后,Addr、PAddr指向的内存区域均会被系统收回。
D. B * ptr=new B(5);delete ptr; 假设上述语句中,new申请的内存空间首地址为Addr,存放ptr指针变量值的内存空间首地址为 PAddr,则执行delete ptr 语句后,Addr、PAddr指向的内存区域均会被系统收回。 这个叙述是正确的,delete会释放new动态申请的内存空间并删除对象。但是,存放ptr指针变量值的内存空间首地址不会被系统收回,它只是一个指针变量,它所占用的内存空间会在该变量的作用域结束时被系统收回。
阅读全文