您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 请教一下blackfin中的内存泄露问题。
本帖共有463个阅读者
发表帖子 发表投票 回复主题
请教一下blackfin中的内存泄露问题。
睡衣人(论坛新手)
睡衣人
头衔:社区公民
帮派:无帮无派
帖数:28
金钱:353
积分:37
注册时间:2012/1/17
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
请教一下blackfin中的内存泄露问题。
代码意图为动态申请一个二维矩阵,并且做运算操作,最后输出结果并释放内存。
奇怪的是该代码在PC上运行内存没有增长,在bf592板子上运行,while循环很快就停止了,判断可能是内存泄露,但是找不到原因。

代码如下。

#include <stdio.h>
#include <stdlib.h>
#include"math.h"

double** s()
{
int i,j;
double **R;
R=matrix(2,2);
for( i = 0; i < 2; i++)
{
for( j = 0; j < 2; j++)
{
   R[i][j]=1;   
}
}
double **Z=NULL;
Z=addMat(R,R,2,2);
for( j = 0; j < 2; j++)
{
   free(R[j]);
   R[j]=NULL;
}
free(R);
R=NULL;
    return R;
}

void main()
{
  int i,j;
  int count=0;
while(1)
{  
double **W;    
W=s();
for( j = 0; j < 2; j++)
{
free(W[j]);
}
free(W);
}
}
//下面为以上s()用到的两个子函数

//1.矩阵加法操作
double** addMat(double **mat1, double **mat2, int row, int col)

{
double **Rmat;
Rmat=matrix(row,col);
int i,j;

for( i = 0; i < row; i++)

{
    for( j = 0; j < col; j++)
  {
Rmat[i][j]= mat1[i][j] +mat2[i][j];
  }
}
return Rmat;
}

//2.申请二维矩阵
double** matrix(int m,int n)
{
  int i,j;
  double **mat;
  mat=(double**)malloc(m*sizeof(double*));  
  for(i=0;i<m;i++)
    mat[i]=(double*)malloc(n*sizeof(double));
   return mat;

}

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/3/21 15:24:14
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
可能使用的内存溢出,bf592只有20K可用的内存,一旦超限代码就跑飞

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/3/21 23:43:42
睡衣人(论坛新手)
睡衣人
头衔:社区公民
帮派:无帮无派
帖数:28
金钱:353
积分:37
注册时间:2012/1/17
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
但是我在主函数里面使用动态申请内存和释放,就没有任何问题。甚至申请更大一些的空间也没有问题,程序可以运行。一旦放入到函数中去申请并且返回数组指针,内存就会开始泄露

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/3/22 14:52:54
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
不光申请的会占用空间,代码量也会占用,或许代码量太大溢出

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/3/23 9:41:55
睡衣人(论坛新手)
睡衣人
头衔:社区公民
帮派:无帮无派
帖数:28
金钱:353
积分:37
注册时间:2012/1/17
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
所有的代码都在上面了,没有超过100行。是不是我申请数组的方式导致的内存碎片问题?这里使用的是2级指针,可能使用的内存不为连续,导致几个循环以后内存碎片增加?以上只是猜测。可以烦请andy将我代码在bf592上跑一些观察一下会不会这样?

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/3/24 11:16:17
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你可以尝试将代码删减一些,看是否编译正常,如果删除后编译正常,添加后不正常,就是内存消耗完了,这个只能删减代码。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/3/25 22:51:08
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159285 Call, 1 Queries, Processed in 0.016113 second(s),