1

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”语句会响应我想要的方式 - 我非常怀疑它是否与此有关。

4

2 回答 2

1

如果 fdisVec[i] == fdisVec2[i] 怎么办?

在这种情况下, j 未初始化(垃圾),有时该值不是集群向量的有效索引。

于 2012-04-04T13:46:36.547 回答
1

尽管这cluster.size() == 0将是一个问题(正如@VaughnCato 的回答所讨论的那样),访问集群的元素不会导致编译时错误,但很可能会在您运行程序时崩溃。

但是,编译时错误是由于clusters[j]预期 avector< vector< float > >allMfccs[i]只是 a的事实vector< float >

所以根据你的clustersand声明allMfccs,你需要 push allMfccs

于 2012-04-05T07:53:15.363 回答