I was wondering is there any way to create a dangling pointers in python? I guess we have to manually delete an object for example and then the reference of that object will point at a location that has no meaning for the program.
I found this example Here
import weakref
class Object:
pass
o = Object() #new instance
print ("o id is:",id(o))
r = weakref.ref(o)
print ("r id is:",id(r))
o2 = r()
print ("o2 id is:",id(o2))
print ("r() id is:",id(r()))
print (o is o2)
del o,o2
print (r(),r) #If the referent no longer exists, calling the reference object returns None
o = r() # r is a weak reference object
if o is None:
# referent has been garbage collected
print ("Object has been deallocated; can't frobnicate.")
else:
print ("Object is still live!")
o.do_something_useful()
In this example which one is the dangling pointer/reference? Is it o or r? I am confused.
Is it also possible to create dangling pointers in stack? If you please, give me some simple examples so i can understand how it goes.
Thanks in advance.
If you create a weak reference, it becomes “dangling” when the referenced object is deleted (when it’s reference count reaches zero, or is part of a closed cycle of objects not referenced by anything else). This is possible because
weakrefdoesn’t increase the reference count itself (that’s the whole point of a weak reference).When this happens, everytime you try to “dereference” the weakref object (call it), it returns
None.It is important to remember that in Python variables are actually names, pointing at objects. They are actually “strong references”. Example: