Assertion failed: index >= 0 && index < size(), eigen-src\Eigen\src/Core/DenseCoeffsBase.h, line 425

Assertion failed: index >= 0 && index < size(), file F:\VSA_backup_set\libigl-example-project-main\out\build\x64-Debug_deps\eigen-src\Eigen\src/Core/DenseCoeffsBase.h, line 425

从上述错误可以看出应该是矩阵或向量下标越界的问题,出现问题的代码如下:

    int p = P.size();
    vector<VectorXi> regions(p);  
    vector<VectorXi> costs(p);  
    int pp = Proxies.rows() / 2;  

    for (int u = 0; u < p; u++) {
        MatrixXd center = get<0>(P[u]);
        int num = center.rows();
        VectorXi costs_u = costs[u];
        VectorXi regions_u = regions[u];
        costs_u.resize(num);
        regions_u.resize(num);
    }

对于上述的各个vector类型的变量,如果如上述代码所示通过遍历设置各个vector内部的各个VectorXi的大小,然后通过下述代码中的方法,通过下标去访问各个vector<VectorXi>类型的变量(regions和costs)并对它们进行赋值,就会出现上述下标越界的错误,也就是说先定义各个vector<VectorXi>类型的变量的大小,然后通过下标对其进行访问,会出现下标越界的错误

 for (int u = 0; u < p; u++) { 

        VectorXi costs_u = costs[u]; 
        VectorXi regions_u = regions[u];
        MatrixXd center = get<0>(P[u]);
        int num = center.rows();
        for (int v = 0; v < num; v++) {
            costs_u(v) = MAXFLOAT;
            regions_u(v) = -1;
        }
        }

解决办法是不用下标去访问各个vector类型的变量,而是先定义一些VectorXi变量对其进行赋值,然后用各个vector类型的变量去push_back已赋值的VectorXi变量,这样就避免了下标越界的问题:

for (int u = 0; u < p; u++) {  

        int num = sp_global_id.size();         
        VectorXd costs_u(num);  
        VectorXi regions_u(num);
        for (int v = 0; v < num; v++) {
            costs_u(v) = MAXFLOAT;
            regions_u(v) = -1;
        }
        regions.push_back(regions_u);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值