I am learning about dll. I created a simple dll with one class and one member function that returns a string object. The function looks something like this.

string MyClass::MyFunc()
string text = TEXT("Testing 1 2 3");
return text;

In the main program, I statatically link the dll to the program. Everything compiles fine. However, the program crashes right after MyFunc().

// Statically link DLL.

#include "MyDLL.h"

void MyWinClass::F1()
// Instantiate MyClass as local variable

MyClass oneVar;

// Attempt to get text from oneVar's member function
// MyFunc() should return a string object. It does.

string newText = oneVar.MyFunc();

Everything works up to and including the last line of code. I could even open the text MyFunc() returns. There is a big problem, however; the program crashes.

This is the error Visual C++ shows when the program crashes after calling a function via the DLL.

HEAP[MyProgram.exe]: Invalid Address specified to RtlValidateHeap( 00360000, 00353FA0 )
Unhandled exception at 0x77f7f570 in MyProgram.exe.exe: User breakpoint.

In debug mode, the debugger shows a message box that mentioned something about "_BLOCK_TYPE_IS_INVALID(pHead->nBlockUsed)."

Is there something wrong with the dll? The algorithm above works find if I call MyFunc() from inside another class. It seems that the program is trying to free something after return from the dll.