daisysnow
V2EX  ›  问与答

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

  •  
  •   daisysnow · Apr 1, 2017 · 1432 views
    This topic created in 3355 days ago, the information mentioned may be changed or developed.

    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;
    }
    
    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5564 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 71ms · UTC 07:37 · PVG 15:37 · LAX 00:37 · JFK 03:37
    ♥ Do have faith in what you're doing.