c++中delete释放的是指针本体还是指针所指向的内存里的数据
时间: 2024-05-27 08:14:46 浏览: 75
C语言中没有delete这个关键字,它是C++中用来释放动态分配的内存的关键字。对于C++中的delete操作,它释放的是指针所指向的内存里的数据,而不是指针本体。因此,在使用delete操作时,需要保证指针指向的内存是动态分配的,并且没有被其他指针引用,否则可能会导致程序发生崩溃或其它未定义行为。
相关问题
释放指针是让指针等于null还是delete指针
释放指针通常是指释放指针所指向的内存空间。如果使用 new 运算符申请了内存空间,则需要使用 delete 运算符释放该内存空间,否则会造成内存泄漏。在释放指针所指向的内存空间后,为了避免野指针的问题,建议将指针赋值为 nullptr(C++11 之前为 NULL),表示该指针不再指向任何内存空间。这样在后续使用该指针时就可以通过指针是否为 nullptr 来判断该指针是否有效,避免出现访问已释放内存空间的问题。需要注意的是,如果指针不是通过 new 运算符申请的内存空间,比如指向栈上的变量或者全局变量,那么不需要使用 delete 运算符释放该内存空间,也不需要将指针赋值为 nullptr,因为这些内存空间的释放会在变量作用域结束时自动释放。
c++中,如何直接修改某个指针所指向的地址?
在C++中,直接修改某个指针所指向的地址通常涉及到解引用指针(dereferencing)以及指针运算。指针运算包括增加(increment)、减少(decrement)指针的值以改变其指向的地址,但需要注意的是,直接修改指针地址可能会导致未定义行为,除非你非常清楚自己在做什么,比如在管理内存或使用指针算术时。
以下是一个示例代码,展示了如何通过解引用和指针算术来修改指针所指向的地址:
```cpp
#include <iostream>
int main() {
int val = 5;
int* ptr = &val; // 指针ptr指向变量val的地址
std::cout << "指针ptr的初始值为: " << *ptr << std::endl; // 输出初始值
std::cout << "指针ptr指向的地址为: " << ptr << std::endl; // 输出初始地址
// 增加指针的值,让它指向下一个整型数据的位置
// 对于int类型指针,增加1意味着增加sizeof(int)字节
ptr = ptr + 1;
std::cout << "指针ptr修改后的值为: " << *ptr << std::endl; // 输出修改后的值
std::cout << "指针ptr修改后的地址为: " << ptr << std::endl; // 输出修改后的地址
return 0;
}
```
在上面的代码中,我们首先创建了一个指向整型变量的指针`ptr`,然后通过`ptr = ptr + 1;`这条语句来改变指针`ptr`所指向的地址。需要注意的是,我们不能直接给指针赋一个任意的地址值(除非该地址是合法的、有效的,并且在程序的地址空间内),否则可能会导致程序崩溃或其他未定义行为。