我写的一个极大极小值算法,各个地方都是注意了内存了的,为什么还是内存泄露?

th_php 2017-12-07 02:40:23
完全不知道为什么内存泄露,而且,我泄露是第4层和以上就程序崩溃,3层和以下没问题,请有经验的大神看看,谢谢你们!
...全文
743 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2017-12-08
  • 打赏
  • 举报
回复
引用 20 楼 th_php的回复:
引用 18 楼 paschen 的回复:
建议使用一些工具检测内在泄露的位置,然后再分析原因
有什么工具啊,能居然定位到代码段
比如:http://vld.codeplex.com/
wodexiaojidan 2017-12-08
  • 打赏
  • 举报
回复
我昨天跟你说的那个地方你改过了没有, 先delete在置nullptr, 很有可能就是那里跑挂的
「已注销」 2017-12-08
  • 打赏
  • 举报
回复
引用 18 楼 paschen 的回复:
建议使用一些工具检测内在泄露的位置,然后再分析原因
有什么工具啊,能居然定位到代码段
「已注销」 2017-12-08
  • 打赏
  • 举报
回复
引用 17 楼 wodexiaojidan 的回复:
你在AI_BestMove_sample里面追踪下 看是不是迭代器里面跑挂的 打印一下迭代器偏移量
就是有地方内存泄露,我刚刚打开的时候内存是4000K
我下一子是6000K,然后下第三子就上W了,啊啊啊啊啊啊
「已注销」 2017-12-08
  • 打赏
  • 举报
回复
麻烦帮我看看这个alpha-beta算法是不是有问题,我发现qDebug出来的都是MAXNUM和-MAXNUM棋盘棋子走法明显不对,直接按当前第一步棋盘的第一个子走的,也就是我放当头炮,对方出车一步,左边0,0位置的车,我不论做什么,它都出马0,1位置放0,2位置,以此类推的顺序出手
「已注销」 2017-12-08
  • 打赏
  • 举报
回复
引用 28 楼 wodexiaojidan 的回复:
妹子?你是在读研吗?读人工智能吗?
工作啊,我只是希望研究研究算法啦
「已注销」 2017-12-08
  • 打赏
  • 举报
回复
int chessmodel::AlphaBeta(int map[10][9],int depth,int alpha,int beta,bool team)
{
    int Score = 0;
    std::vector<AI_map> *maps;

    // 到达水平线,则返回局面评价值
    if (depth == 0)
    {
      qDebug()<<alpha<<"-----"<<beta;
      return this->Eveluate(map);
    }

    //生成对应的所有走法
    maps = AIMaps(team,map);

    // 逐一走这些走法,并进行递归
    for(std::vector<AI_map>::iterator iter = maps->begin();iter != maps->end();++iter)
    {
        Score = -this->AlphaBeta(iter->map,depth-1,-beta,-alpha,!team);

        if(Score > alpha)
        {
            alpha = Score;
        }

        if(Score < beta)
        {
            break;
        }

    }

    delete maps;

    return alpha;
}
    int max = -MAXNUM;
    int Score = 0;
    std::vector<AI_map> *maps;

    maps = AIMaps(true,map);

    for(std::vector<AI_map>::iterator iter = maps->begin();iter != maps->end();++iter)
    {
        Score = this->AlphaBeta(this->gameMapvac,depth-1,-MAXNUM,MAXNUM,false);

        if(Score > max)
        {
            max = Score;
            memcpy(&this->Bestmap,(&iter->map),sizeof(iter->map));
        }
    }

    delete maps;

    return true;
wodexiaojidan 2017-12-08
  • 打赏
  • 举报
回复
妹子?你是在读研吗?读人工智能吗?
wodexiaojidan 2017-12-08
  • 打赏
  • 举报
回复
昨天跟你说了一遍,你没留意,今天上午也跟你说了一遍, 现在自己发现了还是可以的
「已注销」 2017-12-08
  • 打赏
  • 举报
回复
现在简单版电脑已经做出来了,我还经常打不过,用的4层极大极小算法,复杂版我准备用Alpha-Beta剪枝算法弄个八层吧,嘿嘿,等写完了回来结帖,不过有问题还是希望大家一起帮忙解决一下
「已注销」 2017-12-08
  • 打赏
  • 举报
回复
解决了,同志们,原因是,我特么在删除每产生的AI_map的指针之前先把他指向了NULL,才删,白痴了,我没调试啥,都是白看看出来的。LOL
「已注销」 2017-12-08
  • 打赏
  • 举报
回复
引用 23 楼 ma100 的回复:
valgrind
那是linux的吧,我好像用不了
ma100 2017-12-08
  • 打赏
  • 举报
回复
valgrind
paschen 版主 2017-12-07
  • 打赏
  • 举报
回复
建议使用一些工具检测内在泄露的位置,然后再分析原因
wodexiaojidan 2017-12-07
  • 打赏
  • 举报
回复
你在AI_BestMove_sample里面追踪下 看是不是迭代器里面跑挂的 打印一下迭代器偏移量
「已注销」 2017-12-07
  • 打赏
  • 举报
回复
引用 14 楼 wodexiaojidan 的回复:
你确定是在AI_Sample的memcpy()之前崩溃的吗
我一运行程序,下子后,物理内存就占用高,但是我明明释放了指针啊,多余数组之类的内存空间了
「已注销」 2017-12-07
  • 打赏
  • 举报
回复
引用 14 楼 wodexiaojidan 的回复:
你确定是在AI_Sample的memcpy()之前崩溃的吗
是的,我觉得应该是在递归调用有地方的时候,内存泄露,不断泄露导致内存不够用了就崩溃
wodexiaojidan 2017-12-07
  • 打赏
  • 举报
回复
你确定是在AI_Sample的memcpy()之前崩溃的吗
「已注销」 2017-12-07
  • 打赏
  • 举报
回复
引用 12 楼 wodexiaojidan 的回复:
看你能不能追踪到是在一步段错误的,MAX = -MAXNUM 我有点没看懂, 还有delete和赋nullptr的顺序可以倒置一下
那个MAXNUM是个定义的宏,值为9999,主要是让它保证初始化最大最小值
wodexiaojidan 2017-12-07
  • 打赏
  • 举报
回复
看你能不能追踪到是在一步段错误的,MAX = -MAXNUM 我有点没看懂, 还有delete和赋nullptr的顺序可以倒置一下
加载更多回复(11)

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧