找回密码
 注册
搜索
查看: 944|回复: 6

[讨论] 内存问题

[复制链接]
发表于 2007-5-30 15:54:05 | 显示全部楼层 |阅读模式
我的手机在做一项操作时候会重启,从trace上来看是内存操作的问题,
Exception type: assert
filename = kal_adm.c
line = 627 这是代表哪种内存操作错误?
 楼主| 发表于 2007-5-30 17:08:48 | 显示全部楼层
怎么没人留言啊
点评回复

使用道具 举报

发表于 2007-5-31 10:52:19 | 显示全部楼层
assert 错误啊
文件 kal_adm.c 第627行
我这边看不到这个文件
点评回复

使用道具 举报

发表于 2007-6-3 09:34:40 | 显示全部楼层
就是内存处理出问题了,具体分析还得靠自己,要检查这项操作附近的内存分配情况,特别是动态内存分配,是否存在不安全的分配和释放动作,逐一排除。
点评回复

使用道具 举报

发表于 2007-6-4 17:49:32 | 显示全部楼层
assert是在这里,但是引起这里退出的另有元凶阿,查一下根源吧。
点评回复

使用道具 举报

发表于 2007-8-29 22:42:29 | 显示全部楼层
[em13][em13]
点评回复

使用道具 举报

发表于 2007-8-30 10:48:01 | 显示全部楼层
内存释放出错?


/*************************************************************************
* FUNCTION
*
*  kal_adm_free
*
* DESCRIPTION
*
*  Free a memory block.
*
* PARAMETERS
*
*  adm_id   -   ID of memory pool
*  mem_addr -   memory address to be freed
*
* RETURNS
*
*  None
*
*************************************************************************/
void kal_adm_free(KAL_ADM_ID adm_id, void *mem_addr)
{
    ADM_MB_HEAD *adm_mb_head, *merge_adm_mb_head;
    ADM_MB_LOG *adm_mb_log;
    ADM_MB_FOOT *adm_mb_foot;
#ifdef DEBUG_ADM
    kal_uint32 owner;
#endif

    if (adm_id == NULL)
        EXT_ASSERT(0, 0, 0, 0);

    ASSERT(((ADM_CB *)adm_id)->adm_id == ADM_ID);

    if (mem_addr == NULL)
        return;

#ifdef DEBUG_ADM
    kal_get_my_task_index(&owner);
    ASSERT(owner == ((ADM_CB *)adm_id)->owner);
#endif

    if (((ADM_CB *)adm_id)->islogging == 1) {

        /* adjust the address if logging is enabled */

        mem_addr = (void *)((kal_uint8 *)mem_addr - sizeof(ADM_MB_LOG));
    }

    adm_mb_head = ADM_GET_MB_HEAD(mem_addr);

    ASSERT(ADM_MB_STATE(adm_mb_head) == ADM_INUSE);

#if 0
/* under construction !*/
#endif

    if (((ADM_CB *)adm_id)->islogging == 1) {

        /* check guard pattern in the log and the footer */

        adm_mb_log = ADM_GET_MB_LOG(adm_mb_head);
        ASSERT(adm_mb_log->stamp == ADM_MB_LOG_STAMP);

        adm_mb_foot = ADM_GET_MB_FOOT(adm_mb_head);
        ASSERT(adm_mb_foot->stamp == ADM_MB_FOOT_STAMP);

    }

    /* merge with free neighbors */
    if (ADM_MB_PREV(adm_mb_head) != NULL && ADM_MB_STATE(ADM_MB_PREV(adm_mb_head)) == ADM_FREE) {

        merge_adm_mb_head = ADM_MB_PREV(adm_mb_head);

        /* remove the neighbor from block lists */
        kal_adm_removefrombl(merge_adm_mb_head);
      
        merge_adm_mb_head->next = adm_mb_head->next;

        /* update (adm_mb_head->next) memory block */
        if (adm_mb_head->next != NULL)
            adm_mb_head->next->prev = ADM_MB_SET_PREV(adm_mb_head->next->prev, merge_adm_mb_head);

        adm_mb_head = merge_adm_mb_head;
    }
    if (adm_mb_head->next != NULL && ADM_MB_STATE(adm_mb_head->next) == ADM_FREE) {

        merge_adm_mb_head = adm_mb_head->next;

        /* remove the neighbor from block lists */
        kal_adm_removefrombl(merge_adm_mb_head);

        adm_mb_head->next = merge_adm_mb_head->next;

        /* update (adm_mb_head->next) memory block */
        if (merge_adm_mb_head->next != NULL)
            merge_adm_mb_head->next->prev = ADM_MB_SET_PREV(merge_adm_mb_head->next->prev, adm_mb_head);
    }

    /* set the memory block as FREE */
    ADM_MB_SET_FREE(adm_mb_head);

    kal_adm_add2bl((ADM_CB *)adm_id, adm_mb_head);
}
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-25 01:00 , Processed in 0.113234 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表