示例代码是这样的:任何方式都可以识别内存地址是否可用?
#include <iostream>
using namespace std;
int main()
{
int* addr = (int*)malloc(100);
cout << "Hello World" << endl;
printf("addr#1=%p\n",addr);
free(addr);
printf("addr#2=%p\n",addr);
return 0;
}
我知道addr#1
和addr#2
将打印相同的地址。 但是有没有一种方法可以识别可以自由使用的地址?
有人说这是不可能的,除非你重新分配NULL
或nullptr
到addr
来识别。好的,如果指针指向一个对象,并且该对象被删除,结果是一样的?
可能的重复[如何检查指针是否已在C中释放?](https://stackoverflow.com/questions/8300853/how-to-check-if-a-pointer-is-freed-already -in-c) –
好吧,如果指针指向一个对象,并且该对象被删除,结果是一样的? – naive231
如果这是C(标记为),'printf(“addr#2 =%p \ n”,addr);'调用*未定义行为*试图在'free(addr)'后面访问'addr'。 –