2 ohbrown ohbrown 于 2015.06.05 02:44 提问

C++小程序 运行时提示Aborted (core dumped)

Leetcode 上的一道算法题
#include
#include

using namespace std;

class Solution {
public:
vector > permute(vector nums) {
vector > rt;
rt = permu_dfs(nums, 0, rt);
//cout<< rt.size()<< endl;
return rt;
}

vector<vector<int> > permu_dfs(vector<int>& nums, int start, vector<vector<int> > input){
    if(start == nums.size() - 1){
        input.push_back(nums);
        return input;
    }
    for(int i = start; i < nums.size(); i++){
        swap(nums[i], nums[start]);
        permu_dfs(nums, start + 1, input);
        swap(nums[i], nums[start]);
    }
}

};

int main(){
vector a{1,2};
Solution s;
vector > rt;
rt = s.permute(a);
cout<< rt.size()<< endl;
return 0;
}
运行时报错:
*** Error in `./a.out': double free or corruption (out): 0x0000000000400ad0 ***
Aborted (core dumped)
之前同样的代码还报过munmap_chunk(): invalid pointer, 不知道这回报的为啥不一样。。

试过permu_dfs函数rt传参数用引用,返回值改成void,问题解决了,但一直没搞明白这代码问题出哪了。

3个回答

gamefinity
gamefinity   Rxr 2015.06.05 06:55

1.可以通过输出一些位置标志来确认问题出在哪里。
2.贴的代码要全部按照代码的格式贴出来,才能看清你的代码,现在这样贴,很多缺漏、错误,因此无法看清你的代码的具体问题

ohbrown
ohbrown 是要全部代码格式贴的,不知道为啥只有那个函数有缩进。。又重新贴了一会,还是那鬼样。。
2 年多之前 回复
91program
91program   Ds   Rxr 2015.06.05 07:25

应该是下标越界了,查查 start + 1 传入函数后是否可能大于 vector 的维数吧

ohbrown
ohbrown 但是用引用(vector<vector<int> >& input)就不报错啊,要是越界应该都报的
2 年多之前 回复
ohbrown
ohbrown   2015.06.05 22:48

#include
#include

using namespace std;

class Solution {
public:
vector > permute(vector nums) {
vector > rt;
rt = permu_dfs(nums, 0, rt);
//cout<< rt.size()<< endl;
cout<< 'c'<<endl;
return rt;
}

vector<vector<int> > permu_dfs(vector<int>& nums, int start, vector<vector<int> >& input){
    if(start == nums.size() - 1){
        cout<< 'a'<<endl;
        input.push_back(nums);
        return input;
    }
    for(int i = start; i < nums.size(); i++){
        swap(nums[i], nums[start]);
        permu_dfs(nums, start + 1, input);
        cout<< 'b'<<endl;
        swap(nums[i], nums[start]);
    }
}

};

int main(){
vector a{1,2};
Solution s;
vector > rt;
rt = s.permute(a);
//cout<< rt.size()<< endl;
return 0;
}


Csdn user default icon
上传中...
上传图片
插入图片