永发信息网

debug error C++ after normal block #58

答案:2  悬赏:70  手机版
解决时间 2021-02-23 03:50
#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”之后就会内存错误。如何调试?
最佳答案
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);
全部回答
你在操作内存时越过了你分配内存的边界,也就是访问的是你不该访问的内存
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
长沙市芙蓉区发展改革委员会我想知道这个在什
梅河大桥属于什么桥?
我是青岛大学大四的学生,今年6月份毕业时暂
贝特佳奶粉好吗 宝宝知道
句容市公路路政大队第五中队地址有知道的么?
他是一名清洁工。该改成比喻句
从社会政策的角度来看,社会福利概念的含义包
宁津县刘营伍乡便民服务中心怎么去啊,有知道
电子表格中如何筛选
大佬们,不玩游戏,G4400跟六代i3相差很大吗
国栋门业怎么去啊,有知道地址的么
玉米秸秆怎么生产无水乙醇啊!
开关电源是不是坏了?
广州南到桐梓北都经那些站
润泰装饰在什么地方啊,我要过去处理事情
推荐资讯
一个匀强电场的场强为1.0×104V/m,在平
皇后成长计划手机版,如何存档呢? 皇后成长
王源爸爸妈妈的名字
谁有爱丽斯沃克的小说《紫色》的中文版吗?发
昆明广告有限公司在什么地方啊,我要过去处理
最快怎么知道怀孕时间
华为荣耀畅玩5x第一次充电要多久
中通快递单号401687893281台州到长春需要今几
【wogame】翻译这篇文章Watsonwonhismostimpo
acer笔记本 bios里面怎么把显卡设置为 双显卡
路程5。7公里,步行或者骑车分别需要多长时间
王八怎么煮才好吃
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?