这是一个为powerbuilder写的动态库,好像必须写成这种形式,否则会出现内存不可
访问的现象,但是开始时new出了一块内存,这里怎么释放啊???
LPVOID PASCAL getmtime(LPVOID pFileName)
{  CString str;
   char *a,*buffer=new char[256];//****************************
   a=(char *)pFileName;
   if(file.Open(a,CFile::modeRead|CFile::modeCreate))
   file.GetStatus(a,status);
   else AfxMessageBox("error can't open file");
   str.Format("%d年 %d月 %d日",status.m_mtime.GetYear(),status.m_mtime.GetMonth(),status.m_mtime.GetDay());
 for(int i=0;i<str.GetLength();i++)
 {buffer[i]=str.GetAt(i);
 }
buffer[i]='\0';
 //AfxMessageBox(buffer);
    file.Close();
return buffer;//**************************************
   
}

解决方案 »

  1.   

    在这里是不用DELETE的,我也懂一些PB,其实你在PB中调用是告诉你内存不可
    访问不是这里的问题,而是PB中的问题,比如你在PB中调用是这样的
    string str;str = space(256) //在这个地方分配空间str = getmtime("\\filename")这样应该是没有问题的,很多人调用DLL时候都会忘了space()
      

  2.   

    new出来的东西肯定需要delete,主要是看该在什么地方delete
      

  3.   

    也不尽然阿,想楼主这种情况本来那块内存就是要返回的,怎么DELETE,其实这样的写法和直接char buffer[256]这样没有什么区别
      

  4.   

    在PB中使用SPACE后只要那个STR变量失效,就自动释放了