请大家帮忙看下这2个函数,每次泄露都是15980字节,怎么回事?
// allocate memory blocks
void* s2dmalloc( u32 size )
{
void* mem= OSMalloc( size );
if( mem == NULL ){
mem = malloc(size);
s32 i;
for( i=0;i<MAX_MEMBUF;i++){
if( g_pMembuffer[i] == NULL ){
g_pMembuffer[i] = mem;
return mem;
}
}
if( i == MAX_MEMBUF ){
if (mem==NULL)
{
return NULL;
}
else
{
free( mem);
return NULL;
}
}
}
return mem;
}
// frees a memory block
void s2dfree( void* mem )
{
for( s32 i=0;i<MAX_MEMBUF;i++){
if( g_pMembuffer[i] == mem ){
if (mem==NULL)
{
return;
}
else
{
free( mem );
}
g_pMembuffer[i] = NULL;
return;
}
}
OSFree( mem );
}
// allocate memory blocks
void* s2dmalloc( u32 size )
{
void* mem= OSMalloc( size );
if( mem == NULL ){
mem = malloc(size);
s32 i;
for( i=0;i<MAX_MEMBUF;i++){
if( g_pMembuffer[i] == NULL ){
g_pMembuffer[i] = mem;
return mem;
}
}
if( i == MAX_MEMBUF ){
if (mem==NULL)
{
return NULL;
}
else
{
free( mem);
return NULL;
}
}
}
return mem;
}
// frees a memory block
void s2dfree( void* mem )
{
for( s32 i=0;i<MAX_MEMBUF;i++){
if( g_pMembuffer[i] == mem ){
if (mem==NULL)
{
return;
}
else
{
free( mem );
}
g_pMembuffer[i] = NULL;
return;
}
}
OSFree( mem );
}
解决方案 »
- 一个简单的问题!
- 对不规则图形取点的问题???
- 请版主帮忙把我发的问题“使用ADO在插入数据后怎么获取自动增量的值?”删除了吧!为什么我自己删除不掉?
- “Win32 error 193”可不可以根据这个提示看到其详细问题原因?
- 多个实例的问题,回答正确必给分
- CDocument::OnOpenDocument的简单问题
- 求1和26个小写英文字母的所有排列组合算法
- ===菜鸟问题===请问在vc下编制业务方面的数据库程序由什么好的要求和规范吗?最好有例子~~多谢~~
- 求一下.提取像素组成新图的算法.
- 请教一个关于字符串的问题?谢谢!!
- mfc中的重大bug,视图类中的错误
- 新手问getlasterror的使用方法
void* s2dmalloc( u32 size )
{
void* mem= OSMalloc( size );
if( mem == NULL ){
mem = malloc(size);
s32 i;
for( i=0;i<MAX_MEMBUF;i++){
if( g_pMembuffer[i] == NULL ){
g_pMembuffer[i] = mem;
return mem;
}
}
if( i == MAX_MEMBUF ){
if (mem==NULL)
{
return NULL;
}
else
{
free( mem);
return NULL;
}
}
}
return mem; // 这里吧,释放了怎么还返回mem呢?
}
一定要作为参数调用s2dfree这个来释放,
void* s2dmalloc( u32 size )
{
void* mem= OSMalloc( size );
if( mem == NULL ){
mem = malloc(size);
if (mem!= NULL) {
s32 i;
for( i=0;i<MAX_MEMBUF;i++){
if( g_pMembuffer[i] == NULL ){
g_pMembuffer[i] = mem;
break;
}
}
if( i == MAX_MEMBUF )
{
free(mem);
}
}
}
// return mem;
}
// frees a memory block
void s2dfree( void* mem )
{
for( s32 i=0;i<MAX_MEMBUF;i++){
if( g_pMembuffer[i] == mem ){
free( mem );
mem=NULL;
//return NULL;
g_pMembuffer[i] = NULL;
return;
}
}
OSFree( mem );
}
你的意思是这样?
像这样
void s2dfree( void* mem )
{
for( s32 i=0;i<MAX_MEMBUF;i++)
{
if( g_pMembuffer[i] == mem )
{
free( mem );
mem=NULL;
//return NULL;
g_pMembuffer[i] = NULL;
return;
}
}
OSFree( mem );
}
而且这个东西不是看出来的
我们也就是提一下思路
你试一下不就知道了