#include "iostream"
#include "vector"
#include "stdio.h"
#include "string"
using namespace std;
vector<vector<int> > answer;
vector<int> temp;
int n = 4;
int k = 2;
int cnt = 0;
void DFS(int);
void swap(int &a,int &b){
int temp = a;
a = b;
b = temp;
}
void combine() {
temp.resize(k);
cnt = 0;
if( k == 1){
for(int i = 1; i <= n ; i++){
temp[0] = i;
answer.push_back(temp);
}
return ;
} else {
for(int i = 1; i <= n ; i++){
temp[i - 1]=i;
}
}
DFS(0);
}
void DFS(int level){
if( level == k ){
answer.resize(cnt + 1);
for(int i = 0 ; i < k ;i++){
answer[cnt].push_back(temp[i]);
}
cnt ++;
return ;
}
for(int i = level ; i < n ; i++){
swap(temp[i], temp[level]);
DFS(level + 1);
swap(temp[i], temp[level]);
}
}
int main(){
combine();
cout << "is over" << endl;
for(int i = 0 ; i < answer.size(); i++){
for(int j = 0 ; j < k ; j++){
cout << answer[i][j] << " ";
}
cout << endl;
}
cout << "show over" << endl;
}
为什么错了?
我测试的话是显示“show over”之后就会内存错误。如何调试?
debug error C++ after normal block #58
答案:2 悬赏:70 手机版
解决时间 2021-02-23 03:50
- 提问者网友:我是我
- 2021-02-22 18:39
最佳答案
- 五星知识达人网友:鱼芗
- 2021-02-22 19:33
temp.resize(k); //这里resize为k
cnt = 0;
if( k == 1){
for(int i = 1; i <= n ; i++){
temp[0] = i;
answer.push_back(temp);
}
return ;
} else {
for(int i = 1; i <= n ; i++){
temp[i - 1]=i; //这里n是大于k的,所以会越界
}
}
DFS(0);
cnt = 0;
if( k == 1){
for(int i = 1; i <= n ; i++){
temp[0] = i;
answer.push_back(temp);
}
return ;
} else {
for(int i = 1; i <= n ; i++){
temp[i - 1]=i; //这里n是大于k的,所以会越界
}
}
DFS(0);
全部回答
- 1楼网友:蓝房子
- 2021-02-22 20:34
你在操作内存时越过了你分配内存的边界,也就是访问的是你不该访问的内存
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯