【发布时间】:2023-03-21 10:00:01
【问题描述】:
OSX 10.7,XCode 4。
我有一个小问题:在选择过程之后,我需要将 2D vector<vector<float>> 推回 3D 矢量。它在 stl::vector 模板的 push_back 函数中引发 EXC_BAD_ACCESS 错误。看起来它应该很简单(我以前曾多次使用过复杂的数据结构),我尝试了各种不同的想法,但都无济于事。其他一切都有效,并将我期望的值输出到命令行。我敢肯定它的代码是盲目的,而且有一些容易上手的代表。
我问只是因为我相信我的语法是正确的,但在编译时我遇到了问题。下面是一些示例代码:
实施:
for(int i=0;i<fdisVec.size();i++){
int j;
if(fdisVec[i] < fdisVec2[i]){
j = 0;
}
else if(fdisVec2[i] < fdisVec[i]){
j = 1;
}
clusters[j].push_back(allMfccs[i]);
}
我的 .h 有这样声明的对象(类的公共成员):
vector< vector <float> > allMfccs;
vector< vector < vector <float> > > clusters;
如果它有帮助,fdisVec 和 fdisVec2 也是 2d 向量,但是,“if else”语句会响应我想要的方式 - 我非常怀疑它是否与此有关。
【问题讨论】:
-
如果您正在处理 vecs of vecs of floats,您可能需要考虑使用像 boost::numeric::ublas::matrix 这样的矩阵类型。它有一个类似 STL 的界面。尝试使用 .at() 而不是 [] 看看是否抛出异常。
-
尺寸是多少?是不是内存不够了?
-
如果值相等,
j未初始化。 -
注意:如果
fdisVec2[i]和fdisVec[i]相等,j将被初始化。