title: Why does this program crash: passing of std::string between DLLs
body: <p>I have some trouble figuring out why the following crashes (MSVC9):</p>
  
  <pre><code>//// the following compiles to A.dll with release runtime linked dynamically
  //A.h
  class A {
    __declspec(dllexport) std::string getString();
  };
  //A.cpp
  #include "A.h"
  std::string A::getString() {
     return "I am a string.";
  }
  
  //// the following compiles to main.exe with debug runtime linked dynamically
  #include "A.h"
  int main() {
     A a;
     std::string s = a.getString();
     return 0;
  } // crash on exit
  </code></pre>
  
  <p>Obviously (?) this is due to the different memory models for the executable and DLL. Could it be that the string <code>A::getString()</code> returns is being allocated in A.dll and freed in main.exe?</p>
  
  <p>If so, why - and what would be a safe way to pass strings between DLLs (or executables, for that matter)? Without using wrappers like shared_ptr with a custom deleter.</p>