我编写了一个DLL文件,该DLL中有这样一个函数:
void sample(char **t)
{
   *t = new char[10];
}在另外一个程序中,我使用LoadLibrary和GetProcAddress函数使用该函数,即
hinstLib = LoadLibrary("DLL的路径");
typedef void (*FUNTYPE)(char **T);
FUNTYPE pfun = (FUNTYPE)GetProcAddress(hinstLib,"sample");
char *p;
(*pfun )(&p);
这个时候都是正确的,关键是下面的语句
delete []p;
这条语句一运行就出错,难道不可以由DLL申请内存,而由调用者释放内存吗?
请各位高手指教!谢谢!

解决方案 »

  1.   

    在dll再写一个函数
    void releasesample(char *t)
    {
    delete []t;
    }
      

  2.   

    最好是用调用者分配好内存,把地址和长度给被调者,不够再重新分配,windows的api大都是这样的。
    要不就提供成对的函数,一个负责分配,一个负责释放。尽量做到谁分配谁释放。
      

  3.   

    用 GlobalAlloc 来分配内存.用new  的话, 应该是谁分配,谁释放的, DEBUG 下 每个模块都有自己的一个表格,记录着分配过的内存块的信息. 你的 DLL分配好的内存, 显然在 EXE 里 是一块不存在的. 所以就出错了