gpt4 book ai didi

c++ - 删除指针失败

转载 作者:行者123 更新时间:2023-11-30 02:16:09 25 4
gpt4 key购买 nike

我正在学习使用关键字newdelete 的指针和动态内存分配。

下面是我的 C++ 代码来测试我的理解。

#include <iostream>
using namespace std;

int main() {

// Variable to be pointed to by a pointer
cout << "Create a double variable" << endl;
double n = 3.1415926;
cout << "n = " << n << endl;
cout << "&n = " << &n << endl << endl;

// Dynamic memory allocation
cout << "Dynamically allocate memory to a pointer" << endl;
double * ptr = new double;
ptr = &n; // Error when delete ptr
// *ptr = n; // Can delete ptr
cout << "ptr = " << ptr << endl;
cout << "*ptr = " << *ptr << endl << endl;


// Free the pointer memory
cout << "Delete the pointer" << endl;
delete ptr;
cout << "Done" << endl;

return 0;
}

当指针 ptr 指向 n 的地址时(即 ptr = &n)。控制台打印如下错误。

$ ./test
Create a double variable
n = 3.14159
&n = 0x7ffee304f830

Dynamically allocate memory to a pointer
ptr = 0x7ffee304f830
*ptr = 3.14159

Delete the pointer
test(2436,0x118bf05c0) malloc: *** error for object 0x7ffee304f830: pointer being freed was not allocated
test(2436,0x118bf05c0) malloc: *** set a breakpoint in malloc_error_break to debug
Abort trap: 6

但是当指针被这样赋值时:*ptr = n。没有发生这样的错误。而且,ptr指向的是0x7faa7e400630的地址,不是n

的地址

我的理解是 ptr 在这两种情况下都是有效指针(具有有效地址)。但是我不知道为什么 delete ptrptr = &n 的情况不起作用。感谢任何有助于我理解的帮助。谢谢

最佳答案

But when the pointer is assigned like this: *ptr = n. No such error occurs.

当您执行*ptr = n 时,指针不会被删除。这是一个简单的赋值操作。 ptr 指向一个有效的内存。因此,分配给 *ptr 不是问题。

But I don't know why delete ptr does not work for the case of ptr = &n

您只能删除 new 获得的内容。 &n 不是这样的指针。执行delete ptr 与执行delete &n 是一样的。这是不正确的,是导致未定义行为的原因。

关于c++ - 删除指针失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55292507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com