免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4345 | 回复: 5
打印 上一主题 下一主题

[C++] 急救:C++程序运行中的Out of memory的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-26 11:18 |只看该作者 |倒序浏览
程序在运行中core dump并报Out of memory的错误,栈信息如下,还望高手解答:

(gdb) bt
#0  0xb7e75164 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string ()
   from /usr/lib/libstdc++.so.5
#1  0x0804d355 in _Destroy<std::string> (__pointer=0x589308a4) at stl_construct.h:125
#2  0x0804d338 in __destroy_aux<std::string*> (__first=0x589308a4, __last=0x5aa1196 at stl_construct.h:101
#3  0x0804d2d6 in _Destroy<std::string*> (__first=0x57a05008, __last=0x5aa1196 at stl_construct.h:143
#4  0x0804cf73 in ~vector (this=0xbfb2f0c0) at stl_vector.h:297
#5  0x080536d5 in sdb::CBaseTableDataMgr::UpdateBaseTable (this=0xbfb2f3a4)
    at /home/stanjiang/SDBL/src/sdb_ante_basetablemgr.cpp:327
#6  0x08054e55 in sdb::CBaseTableDataMgr::OutputBaseTableStat (this=0xbfb2f3a4)
    at /home/stanjiang/SDBL/src/sdb_ante_basetablemgr.cpp:464
#7  0x0805af71 in sdb::CGameStatMgr::RunStat (this=0xbfb2f3a0) at /home/stanjiang/SDBL/src/sdb_ante_gamestat.cpp:40

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2007-04-26 11:31 |只看该作者
内存泄漏?

论坛徽章:
0
3 [报告]
发表于 2007-04-26 19:08 |只看该作者
代码呢?如果方便,还是给出来吧

论坛徽章:
0
4 [报告]
发表于 2007-04-26 21:48 |只看该作者
//获取SQL执行后的结果集,RecordContainer为vector<map<string,string>>
bool sdb::CMySql::GetQueryResult(RecordContainer& vecResult)
{
    if(NULL == m_pRes)
    {
        m_strError  = "结果集为空!";
        return false;
    }

    MYSQL_FIELD *pFields = mysql_fetch_fields(m_pRes); // 结果集中字段结构
    if(NULL == pFields)
    {
        m_strError = "获取结果集的字段结构失败!";
        return false;
    }
  
     MYSQL_ROW row = NULL;   // 结果集记录行
    ULONG* pColLen = NULL;   // 记录行长度指针
    CHAR aryColValue[MAX_COL_LEN] = {0};  // 存储数据列变量
    UINT uiColNum = mysql_num_fields(m_pRes); // 结果集中的列数
    std::string strFieldValue;
    QueryResultMap rowResMap;     

    // 遍历结果集
    while(NULL != (row = mysql_fetch_row(m_pRes)))
    {
        pColLen = mysql_fetch_lengths(m_pRes);  // 获取行记录集各字段的长度结构

        // 获取记录行中的所需字段值
        if(NULL != row && NULL != pColLen)
        {           
            UINT i = 0;
            for(; i < uiColNum; ++i)
            {
                memset(aryColValue, 0, MAX_COL_LEN);
                memmove(aryColValue, row[i], pColLen[i]);
                strFieldValue = aryColValue;               
                if(!rowResMap.insert(QueryResultMap::value_type(pFields[i].name, strFieldValue)).second)
                {
                    m_strError = "结果集的字段值插入Map容器失败!";
                    return false;
                }

                if(m_vecQueryFields.size() < uiColNum)
                    m_vecQueryFields.push_back(pFields[i].name); // 存储被查询的字段名
            }               
            vecResult.push_back(rowResMap);
            rowResMap.clear();
        }        
    }

    return true;
}
这段程序有问题吗,望高手指点!

论坛徽章:
0
5 [报告]
发表于 2007-04-26 21:52 |只看该作者
Out of memory (Needed 8164 bytes)
Out of memory (Needed 8199 bytes)
Out of memory (Needed 8199 bytes)
Out of memory (Needed 8199 bytes)
这是程序报的错

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2007-04-26 22:05 |只看该作者
原帖由 msjhon 于 2007-4-26 21:48 发表
//获取SQL执行后的结果集,RecordContainer为vector<map<string,string>>
bool sdb::CMySql::GetQueryResult(RecordContainer& vecResult)
{
    if(NULL == m_pRes)
    {
        m_strEr ...

C++,几乎所有的东西都隐藏在你看不到的地方……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP