这里cdp是一个包含一些矢量的程序包。访问向量时会导致分割错误。 (我在仔细检查过的范围内访问了向量)。我计划使用try catch处理此异常,但是它不起作用。
根据gdb,以下行引起了问题。
int firing_crash=cdp->firing_data[0].size();
功能如下:
bool modified_simplex_solver::check_for_corrupt_cdp(converted_data_pack* cdp)
{
try{
int firing_crash=cdp->firing_data[0].size();
int not_firing_crash=cdp->not_firing_data[0].size();
return false;
}
catch(...)
{ return true;}
}
答案 0 :(得分:1)
如果向量在指定索引处没有元素,则可以使用operator[]
成员函数来代替at()
(不执行边界检查),并且会导致不确定的行为,而不是使用pos
。
此功能:
返回对指定位置pos处元素的引用,并进行边界检查。
如果
std::out_of_range
不在容器范围内,则会抛出类型为at()
的异常。
由于catch
引发了异常,因此您可以int firing_crash=cdp->firing_data.at(0).size();
。
您的情况下的用法是:
for index in 0...100 {
let urlString = "https://someurl.com/item/\(index)"
guard let url = URL(string: urlString) else { return }
requestPromises += [URLSession.shared.dataTask(.promise, with: url).validate()]
}
firstly {
when(fulfilled: requestPromises)
}.done { results in
// process results
}
答案 1 :(得分:0)
问题中的代码将异常用于流控制。那是Java的事情;在C ++中,它皱眉了。在C ++(以及Java中)中执行此操作的方法是检查数据是否存在:
return firing_data.empty() || not_firing_data.empty();