Dll导出函数返回的堆空间指针不能delete是怎么回事
如题,今天写程序时候遇到了一个棘手的问题。
dll的导出函数 返回一个new过的堆指针。在main过程里不能delete。
dll代码:
#include "stdafx.h"BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ return TRUE;}void * G()//注意这里的导出函数是用def文件标注过的,可以getprocaddress{ return new char[50];}
#include <windows.h>#include <stdio.h>typedef void *(*fG) ();int main(int argc, char* argv[]){ HMODULE hModule=LoadLibrary("Export.dll"); if(hModule==NULL) { printf("LoadLibrary error \n"); return 0; } fG G=(fG)GetProcAddress(hModule,"G"); if(G==NULL) { printf("GetProcAddress error \n"); return 0; } char * ret=(char*)G(); strcpy(ret,"Hello World"); printf("%s\n",ret); delete[] ret; FreeLibrary(hModule); return 0;}