类似的代码。一个工作,一个崩溃。为什么?

时间:2018-05-26 22:12:15

标签: c++

我在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循环中崩溃而第二个程序没有呢?

1 个答案:

答案 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) }