|

楼主 |
发表于 2023-7-12 14:39:20
|
显示全部楼层
本帖最后由 hpdell 于 2023-7-12 21:29 编辑
目前使用的是 fatfs
我目前是搜索到 sd 卡目录里面的相关文件后进行保存,第一次搜索保存,用完后释放内存可以,
但是第二次搜索 就出现了错误了,貌似是内存溢出错误,看程序也没有发现 什么问题,目前有点纠结呀 ?
#define FILE_SEARCH_OK 0x00
#define FILE_SEARCH_ER 0x01
#define FF_LFN_BUF 255
#define FILEMGR_LIST_DEPDTH 128 // 文件总个数
#define FILEMGR_FILE_NAME_SIZE (FF_LFN_BUF+1) // 文件名总长度
typedef struct _LineTypeDef {
uint32_t size;
uint16_t type;
char *pname;
}_LineTypeDef_t;
typedef struct __FileTypeDef {
_LineTypeDef_t *file[FILEMGR_LIST_DEPDTH] ;
uint16_t ptr;
}_FileTypeDef_t;
_FileTypeDef FileList;
// 申请内存
static uint16_t File_MallocBuff(uint16_t memNum)
{
uint16_t cnt;
if((memNum == 0) || (memNum > FILEMGR_LIST_DEPDTH))
return FILE_SEARCH_ER;
for(cnt = 0;cnt < memNum; cnt++)
{
FileList.file[cnt] = (_LineTypeDef_t *)mymalloc(SDRAMEX, sizeof(_LineTypeDef_t));
FileList.file[cnt]->pname = (char *)mymalloc(SDRAMEX, FILEMGR_FILE_NAME_SIZE); // 每个文件名大小缓存
if((FileList.file[cnt] == NULL) || (FileList.file[cnt]->pname == NULL)) {
FATFS_Log("File_MallocBuff err ...? \r\n");
return FILE_SEARCH_ER;
}
memset(&FileList.file[cnt]->pname[0], 0, FILEMGR_FILE_NAME_SIZE);
}
return FILE_SEARCH_OK;
}
// 释放内存
static uint16_t File_FreeBuff(uint16_t memNum)
{
uint16_t cnt;
if(memNum == 0)
return FILE_SEARCH_ER;
for(cnt = 0;cnt < memNum; cnt++)
{
myfree(SDRAMEX, &FileList.file[cnt]->pname[0]) ; // 原来是这个 & 符号是多余的, 哎, 惭愧惭愧,
myfree(SDRAMEX, &FileList.file[cnt]) ;
}
FileList.ptr = 0; // 释放内存后,相应的变量也清0
return FILE_SEARCH_OK;
}
大神帮我看看这个内存申请,释放 到底是哪里有问题呀 ???
|
|