我在Code :: Blocks 10.05中使用C ++解决Project Euler的问题,发现我的程序在一个奇怪的地方崩溃:初始化。这是一个代码片段,可以重现问题。
#include <iostream>
#include <vector>
#include <deque>
using namespace std;
vector<deque<uint32_t> > f;
int main()
{
deque<uint32_t> p;
deque<uint32_t>::iterator dit1,dit2;
p.push_back(0);
p.push_back(1);
f.push_back(p);
cout << f.back().size() << endl;
cout << "f= ";
for(dit1==f.back().begin();dit1!=f.back().end();dit1++) cout << *dit1 << " ";
cout << "Checkpoint" << endl;
return 0;
}
在发布之前,我尝试了一个测试程序,看看能不能找出问题。
#include <iostream>
#include <deque>
#include <vector>
using namespace std;
int main(void)
{
uint64_t i;
deque<uint32_t> d;
vector<deque<uint32_t> > vd;
deque<uint32_t>::iterator it;
for(i=1;i<=5;i++) d.push_back(i);
vd.push_back(d);
for(it=vd.back().begin();it!=vd.back().end();it++) cout << *it << " ";
return 0;
}
第一个程序崩溃而第二个程序正确再现双端队列。除了变量名,我看到的唯一主要区别是第一个程序使用全局变量,测试程序使用局部变量。那么为什么第一个程序在for循环中崩溃而第二个程序没有呢?
答案 0 :(得分:1)
您在第一个程序的for循环中使用了if let json = try? JSON(data: data).arrayValue {
for item in json {
let imagesList = item["images"].arrayValue
let imagesURL = imagesList.map {$0["original"].string}.compactMap({$0})
if imagesURL.count > 0{
print( imagesURL[0])
}
}
}
而不是do {
let json = try JSON(data: data).array
json?.forEach({ (item) in
let imagesList = item["images"].arrayValue
let imagesURL = imagesList.map {$0["original"].string}.compactMap({$0})
if imagesURL.count > 0{
print( imagesURL[0])
}
})
} catch {
print(error.localizedDescription)
}
。