V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
daisysnow
V2EX  ›  问与答

百思不得解,求指导: leetcode 39. Combination Sum,报了 free(): invalid pointer: 0x000000000120df00 ***这个错

  •  
  •   daisysnow · 2017-04-01 21:42:18 +08:00 · 1173 次点击
    这是一个创建于 2645 天前的主题,其中的信息可能已经有所发展或是发生改变。

    leetcode : leetcode 39. Combination Sum,报了 free(): invalid pointer: 0x000000000120df00 ***这个错,想不明白是为什么,没有用指针呀?在哪里会存在 free 的问题呢?代码是这样的。。

    vector<vector<int>> combinationSum(vector<int>& candidates, int target) { vector<vector<int> > result ; if(candidates.size() == 0 ) { return result; } sort(candidates.begin(), candidates.end()); vector<int> tmp_memo; vector<int> tmp_index; int tmp_target = target; for(int i = candidates.size() - 1; i >=0; i --) { tmp_index.push_back(i); } while( !tmp_index.empty() ) { int index = tmp_index.back(); //查看有没有越界 if(index >= candidates.size() ) { tmp_index.pop_back(); int i = tmp_index.back(); //父结点出栈 tmp_index.pop_back(); tmp_memo.pop_back(); tmp_target += candidates[i]; continue; } //没有越界就访问 tmp_memo.push_back(candidates[index]); if(tmp_target == candidates[index])//找到目标 { result.push_back(tmp_memo); if(tmp_memo.size() == 1)//只有一个值,表明是顶层结点了,所以直接 break { break; } //当前结点出栈 tmp_index.pop_back(); tmp_memo.pop_back();

                //tmp_target += candidates[index];
                int i = tmp_index.back();
                //父结点出栈
                tmp_index.pop_back();
                tmp_memo.pop_back();
                //目标值要加回去
                tmp_target += candidates[i];
                //父结点的右兄弟入栈
                tmp_index.push_back(i+1);
            }
            else if(tmp_target < candidates[index])//后面的 candidate 更大,没有寻找的必要
            {
                if(tmp_memo.size() == 1)//只有一个值,表明是顶层结点了,所以直接 break
                {
                    break;
                }
                //当前结点出栈,
                tmp_index.pop_back();
                tmp_memo.pop_back();
                //tmp_target += candidates[index];
                //父结点出栈
                int i = tmp_index.back();
                tmp_index.pop_back();
                tmp_memo.pop_back();
                tmp_target += candidates[i];
                //父结点的右兄弟入栈
                tmp_index.push_back(i+1);
            }
            else
            {
                //
                tmp_target -= candidates[index];
                //推入下一层的孩子结点
                tmp_index.push_back(index);
            }
        }
        return result;
    }
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2622 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 06:49 · PVG 14:49 · LAX 23:49 · JFK 02:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.