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

2017-04-01 21:42:18 +08:00
 daisysnow

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;
}
1173 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/352064

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX