[求助]dll中内存释放的问题(200分)

  • 主题发起人 主题发起人 thinking
  • 开始时间 开始时间
T

thinking

Unregistered / Unconfirmed
GUEST, unregistred user!
extern "C" _declspec(dllexport) char* mytest(void);
函数需要返回一个char *
extern "C" _declspec(dllexport) char* mystd(void)
{
char * mystr;
char * info;
info="My Stdcall";
mystr=new char[];
strcpy(mystr,info);
return mystr;
}
mystr在dll的内存堆里面申请了一块内存,dll中申请的内存需要在dll中释放
extern "C" _declspec(dllexport) BOOL FreeMemo(char *mypoint)
{
delete [] mypoint;
return true;
}
但是这个函数执行的时候,是错误的,请教应该如何释放在内存堆中的这块内存?
 
extern "C" _declspec(dllexport) char* mystd(void)
{
char * mystr;
char * info;
int i;
info="My Stdcall";
i = strlen(info);
///
mystr= (char*)malloc(i);
///
strcpy(mystr,info);
return mystr;
}
mystr在dll的内存堆里面申请了一块内存,dll中申请的内存需要在dll中释放
extern "C" _declspec(dllexport) BOOL FreeMemo(char *mypoint)
{
free(mypoint);
return true;
}
 
extern "C" _declspec(dllexport) BOOL FreeMemo(char *mypoint)
{
free(mypoint);
return true;
}
///////////
malloc申请的内存使用free释放,new申请的内存需要使用delete释放。
问题依旧。
 
你既然写了extern "C" ,就不该用new和delete,那是C++的东西,应该用malloc和free
 
extern "C" _declspec(dllexport) BOOL FreeMemo(char *mypoint)
{
delete mypoint;
return true;
}
 
怎么感觉不大对劲,和dll没关系吧
===================================
char * mystr;
char * info;
info="My Stdcall";
mystr=new char[];
strcpy(mystr,info);
free(mystr);
====================================
能顺利执行吗?
没装vc,没法试
 
malloc free 是C 的东西,你应该用Win32的内存管理函数释放和分配,但愿malloc 和 free隐含调用的就是
malloc 和 free
 
我这个dll是使用c++编写的。
extern "C"使得在C++中使用C编译方式成为可能。在"C++"下定义"C"函数,需要加extern "C"关键词。
用extern "C"来指明该函数使用C编译方式。输出的"C"函数可以从"C"代码里调用。
我编写的dll是使用delphi调用。
 
xiaolin0522
delete mypoint;
不行
xiaoduan
函数的返回值是char* ,是一个指针,如果在返回之前,就把这块内存释放掉。
那返回的指针指向的是什么啊?
NoSwing
malloc free 是c中的内存申请和释放
new delete是c++中的内存申请和释放,这和这个问题好像没什么关系啊。
 
extern "C" _declspec(dllexport) char* mystd(void)
{
char * mystr;
char * info;
info="My Stdcall";
/// mystr=new char[];
空间是多少???
/// strcpy(mystr,info);
return info;///////直接
}
 
jsxjd
这个函数,我只是说明一个意思,并不是要返回info="My Stdcall";这个值。
在实际程序中,info有可能是string或者别的类型,但是在delphi中没有相应的变量类型对应。
所有需要返回一个指针。
但是dll的原则是,dll中申请的内存需要在dll中释放,所有,我需要在dll中编写一个函数来
释放申请的内存。
 
分配内存必须指定大小。
char* c = new char[5];
delete c;
 
extern "C" _declspec(dllexport) char* mystd(void)
{
char * mystr;
char * info;
int i;
info="My Stdcall";
i=strlen(info);
mystr=new char[i+1];
//这里必须加一
strcpy(mystr,info);
return mystr;
}
extern "C" _declspec(dllexport) BOOL FreeMemo(char *mypoint)
{
delete [] mypoint;
//必须有[],因为mypoint指向的是字符串数组,不是一个字符
return true;
}
 

Similar threads

后退
顶部