背景信息:我想把指针包裹住,几个星期前我们刚在学校看到它们,今天练习的时候我遇到了傻子吗?问题,对您来说可能非常简单,但是我几乎没有编程经验。
我已经在SO中看到了很多有关删除指针的问题,但它们似乎都与删除类有关,而不是与“简单”指针(或任何适当的术语)有关,这是我正在尝试的代码跑:
#include <iostream>;
using namespace std;
int main() {
int myVar,
*myPointer;
myVar = 8;
myPointer = &myVar;
cout << "delete-ing pointers " << endl;
cout << "Memory address: " << myPointer << endl;
// Seems I can't *just* delete it, as it triggers an error
delete myPointer;
cout << "myPointer: " << myPointer << endl;
// Error: a.out(14399) malloc: *** error for object 0x7fff61e537f4:
// pointer being freed was not allocated
// *** set a breakpoint in malloc_error_break to debug
// Abort trap: 6
// Using the new keyword befor deleting it works, but
// does it really frees up the space?
myPointer = new int;
delete myPointer;
cout << "myPointer: " << myPointer << endl;
// myPointer continues to store a memory address.
// Using NULL before deleting it, seems to work.
myPointer = NULL;
delete myPointer;
cout << "myPointer: " << myPointer << endl;
// myPointer returns 0.
}
所以我的问题是:
- 为什么第一种情况不起作用?似乎最直接的使用方式是使用和删除指针?该错误表明未分配内存,但'cout'返回了一个地址。
- 在第二个示例中,未触发错误,但是对myPointer的值进行计算仍然返回内存地址?
- #3真的有效吗?似乎对我有用,指针不再存储地址,这是删除指针的正确方法吗?
很长的问题,很抱歉,想让这个问题尽可能清楚,还要重申,我几乎没有编程经验,所以如果有人可以使用外行的术语回答这个问题,将不胜感激!
delete
你new
。删除指针后,也不需要将其自身设置为NULL。如果您想在那里安全,请使用智能指针,这些指针可以为您释放内存,并在您尝试不使用它们保存某些东西时出错。