通业开发人论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 388|回复: 0

操作动态分配内存越界导致后续分配动态内存失败

[复制链接]
发表于 2015-7-21 00:34:08 | 显示全部楼层 |阅读模式
失败现象:
create msgq failed.
Create GUI server failed.
finsh>>post when server is not running
create win: main failed
Create window "main" failed!
(app != RT_NULL) assert failed at rtgui_send_sync:600

    app->mq = rt_mq_create(mq_name, sizeof(union rtgui_event_generic), 32, RT_IPC_FLAG_FIFO);
    if (app->mq == RT_NULL)//经过跟踪,发现此处失败的原因是rt_malloc 分配失败.
    {
        rt_kprintf("create msgq failed.\n");
        goto __mq_err;//失败后进而导致Create GUI server failed.以至于server is not running
    }
通过对gui前期的rt_malloc分析.
    uint8_t * buffer = rt_malloc(4096);

rt_device_read(device, search_page, buffer, pages);
对buffer的操作大小为8192,远大于所分配的大小.
将其改为uint8_t * buffer = rt_malloc(8192);后,程序正常执行.

由以上分析得出结论,对动态分配的内存操作越界后,可能导致后续内存分配失败.

因此以后遇到动态内存分配失败时可从此入手分析.

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|TongYe R&D Inc.

GMT+8, 2024-5-13 06:49 , Processed in 0.118007 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2000-2022, Tongye. 粤ICP备17061194号

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