DLL里为什么不能返回一个map对象
yfish 2003-11-13 09:38:13 我发现DLL里的函数new的东西,不能在调用DLL的进程里delete,反之亦然。
这似乎不合逻辑。但却是真的
DLL:
int * create(){
return new int(1);
}
EXE:
int * pi=create();
delete pi;//ERROR!!!
或
DLL:
void release(int * pi){
delete pi;//ERROR!!!!!
}
EXE:
release(new int(1));
另外,我在DLL里返回map<string,string>类型的东西,调用DLL的进程却不能接受它,像这样:
DLL:
map<string,string>* getData(){
map<string,string>* pm;
pm->insert(pair<string,string>("1","1"));
}
EXE:
map<string,string>* pm=getData();
map<string,string> m =*pm;//ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
map<string,string>::iterator iter=pm->begin();
while(iter != pm->end())
{
cout << (*iter).first ; //OK,output "1"
iter++;//ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
并不是所有的元素都不能访问,只是最后一个元素的后一个元素不行。