dll返回的char *的字符串 需要释放这个指针么,该怎么解决

dll返回的char *的字符串 需要释放这个指针么
dll

C/C++ code


extern   "C"   __declspec(dllexport)   char*   ShowTime(void);// 这个用于
extern   "C"   __declspec(dllexport)   char*   ShowTime(void)
{
    char *p=new char[20];
    strcpy_s(p,10,"morning");
    return p;
}





主程序
C/C++ code

        HINSTANCE hDll; //DLL句柄

    lpgetname addname; //函数指针变量

    hDll = LoadLibrary(_T("mydll.dll"));
    char *myname;

    if (hDll != NULL)

    {

        addname = (lpgetname)GetProcAddress(hDll, "ShowTime");

        if (addname != NULL)

        {

            myname = addname();

            TRACE(_T("%s\n"), myname);
        

        }

        FreeLibrary(hDll);
                //    delete myname;//这里一释放指针就出错 
    }





请教了谢谢

------解决方案--------------------
dll中提供一个函数void FreeMem(void* ptr)用来释放DLL自己分配的内存。

exe在myname = addname();之后,调用FreeMem(myname)来释放内存。


注意:不要在exe里面直接delete。因为exe和dll用的可能不是同一个heap.

------解决方案--------------------
两种都可以

最好是在EXE中分配、销毁,向DLL传入char* p ,

否则在多个EXE同时使用DLL时,如果释放不及时,DLL的堆消耗的非常快……


------解决方案--------------------
探讨
谢谢楼上的
还有个问题

我看到好像还有个做法 是在外面exe中申请char* p的空间
然后把指针传入到dll中
最后再外面释放p

这样是否也行 那种更好呢?

------解决方案--------------------
探讨
谢谢楼上的
还有个问题

我看到好像还有个做法 是在外面exe中申请char* p的空间
然后把指针传入到dll中
最后再外面释放p

这样是否也行 那种更好呢?