对不起,在贴一次。
有关内存释放失败的问题。在exe中不能释放由dll申请的内存。高手请解答!我将fun1写在一个dll中,如下,(在项目实际当中int为一个复杂的结构,这里用int代替)__declspec( dllexport ) void fun1( int** ppintdata,long &RecordCount);
void fun1( int** ppintdata,long &RecordCount){ int* pintdata=NULL;
int i; RecordCount=12;
pintdata= new int[RecordCount];
for (i=0;i<12;i++)
{
pintdata[i]=i+10;
}
*ppintdata=pintdata;
}
然后在另外一个exe中调用,如下:__declspec( dllimport ) void fun1( int** ppintdata,long &RecordCount);void CTest16Dlg::OnButton2() { int* pintdata;
long RecordCount;
int intRecords;
CString tmp;
fun1(&pintdata,RecordCount);
for ( intRecords = 0;intRecords < RecordCount;intRecords++)
{
tmp.Format("%d,%d,\n",intRecords,pintdata[intRecords]);
AfxMessageBox(tmp);
}
if (pintdata!=NULL)
{
delete [] pintdata;
pintdata=NULL;
}
}当执行到delete [] pintdata;时失败,不能将内存删除。
如果我不用dll,直接调用,如下,则成功删除,最后pintdata=0x000;void fun1( int** ppintdata,long &RecordCount);void fun1( int** ppintdata,long &RecordCount){ int* pintdata=NULL;
int i;
RecordCount=12;
pintdata= new int[RecordCount];
for (i=0;i<12;i++)
{
pintdata[i]=i+10;
}
*ppintdata=pintdata;
}
void main(){ int* pintdata;
long RecordCount;
int intRecords;
fun1(&pintdata,RecordCount);
for ( intRecords = 0;intRecords < RecordCount;intRecords++)
{
printf("%d,%d,\n",intRecords,pintdata[intRecords]);
}
if (pintdata!=NULL)
{
delete [] pintdata;
pintdata=NULL;
}}问题总结:在exe中不能释放由dll申请的内存。高手请解答!
有关内存释放失败的问题。在exe中不能释放由dll申请的内存。高手请解答!我将fun1写在一个dll中,如下,(在项目实际当中int为一个复杂的结构,这里用int代替)__declspec( dllexport ) void fun1( int** ppintdata,long &RecordCount);
void fun1( int** ppintdata,long &RecordCount){ int* pintdata=NULL;
int i; RecordCount=12;
pintdata= new int[RecordCount];
for (i=0;i<12;i++)
{
pintdata[i]=i+10;
}
*ppintdata=pintdata;
}
然后在另外一个exe中调用,如下:__declspec( dllimport ) void fun1( int** ppintdata,long &RecordCount);void CTest16Dlg::OnButton2() { int* pintdata;
long RecordCount;
int intRecords;
CString tmp;
fun1(&pintdata,RecordCount);
for ( intRecords = 0;intRecords < RecordCount;intRecords++)
{
tmp.Format("%d,%d,\n",intRecords,pintdata[intRecords]);
AfxMessageBox(tmp);
}
if (pintdata!=NULL)
{
delete [] pintdata;
pintdata=NULL;
}
}当执行到delete [] pintdata;时失败,不能将内存删除。
如果我不用dll,直接调用,如下,则成功删除,最后pintdata=0x000;void fun1( int** ppintdata,long &RecordCount);void fun1( int** ppintdata,long &RecordCount){ int* pintdata=NULL;
int i;
RecordCount=12;
pintdata= new int[RecordCount];
for (i=0;i<12;i++)
{
pintdata[i]=i+10;
}
*ppintdata=pintdata;
}
void main(){ int* pintdata;
long RecordCount;
int intRecords;
fun1(&pintdata,RecordCount);
for ( intRecords = 0;intRecords < RecordCount;intRecords++)
{
printf("%d,%d,\n",intRecords,pintdata[intRecords]);
}
if (pintdata!=NULL)
{
delete [] pintdata;
pintdata=NULL;
}}问题总结:在exe中不能释放由dll申请的内存。高手请解答!
{
free(ptr);
}
再在main里适时调用。
void FreeMem(viod* ptr)
{
free(ptr);
ptr=NULL;
}
但是在exe中 的 指针并没有=NULL。
于是调试,进入dll中的freemen中,发现指针已经=NULL,返回到exe中,指针还是不为NULL。怎么办?
{
if (*ptr) {
free(*ptr);
*ptr=NULL;
}
}
至于具体怎么写,要看程序的要求了。