title: Invalidate pointer values inside a QMap
body: <p>I'm having what seems to be a weird issue, but it could be a quirk of how QMap's work and I just don't understand it.  It's tough to summarize the problem, but I'll do my best.</p>
  
  <p>I have a class <code>A</code>, with a <code>QMap&lt;QString, someType*&gt; mySomeTypeMap;</code>.  When I load a new file in my program, I want to delete all the contents of this <code>QMap</code> so I can repopulate it with new data.  I do that by doing the following:</p>
  
  <pre><code>foreach (QString key, mySomeTypeMap.keys())
  {
      someType* toDelete = mySomeTypeMap.take(key);
  
      //Show me the original address of the pointer
      qDebug() &lt;&lt; "toDelete: " &lt;&lt; toDelete;
  
      delete toDelete;
  
      //Set the pointer to 0x0
      toDelete = NULL;
  }
  </code></pre>
  
  <p>The <code>qDebug()</code> statement prints out the correct address of the value I want to delete, and when I look at <code>toDelete</code> in the debugger after it gets set to <code>NULL</code>, it says 0x0, which is what I want.</p>
  
  <p>Then later, in a different class <code>B</code>, I have the following code...</p>
  
  <pre><code>void B::setSomeType(someType* blah)
  {
      if (Blah != NULL)
      {
          //Calls a bunch of disconnect()'s
          disconnectAllSignals();
  
          Blah = blah;
  
          //Calls a bunch of connect()'s
          connectAllSignals();
      }
  }
  </code></pre>
  
  <p>Now, what's really confusing is my program crashes when it gets to the <code>disconnectAllSignals();</code> line.  The reason being it's trying to call <code>disconnect()</code> on <code>Blah</code> which was deleted and should have been set to 0x0 when I set it to <code>NULL</code>.  However, if it was actually set to <code>NULL</code> it never would have entered that if-block to begin with.  In a debugger, I see that the address of <code>Blah</code> is exactly the same as what I get when I print out <code>qDebug() &lt;&lt; "toDelete: " &lt;&lt; toDelete;</code> right before setting <code>toDelete = NULL;</code>.</p>
  
  <p>TLDR; I don't know how my program is getting the orignal address of a pointer back after I delete the pointer and set the same pointer to <code>NULL</code>.  Since the pointer isn't set to <code>NULL</code> later in the execution it leads to a crash.</p>