我在C ++中遇到了这个错误。我试图用multi_array实现Strassen矩阵乘法。我将一个数组分配给另一个相同维度的数组。
就像A11[i][j][k] = A[i][j][k]
一样。我认为理由是那种线条。
你知道原因吗?这个错误意味着什么?断言失败:(size_type(idx - index_bases [0])< extents [0]), 功能访问,文件 /usr/local/Cellar/boost/1.65.1/include/boost/multi_array/base.hpp, 第136行。中止陷阱:6
typedef boost::multi_array<int_type, 3> array_type;
array_type::extent_gen extents;
array_type A(boost::extents[size][size][noc]);
array_type B(boost::extents[size][size][noc]);
array_type C(boost::extents[size][size][noc]);
std::fill( A.origin(), A.origin() + A.num_elements(), 0 );
std::fill( B.origin(), B.origin() + B.num_elements(), 0 );
std::fill( C.origin(), C.origin() + C.num_elements(), 0 );
array_type Strr(int size,int noc,array_type A,array_type B, array_type C) {
if(size == 2) { //2-order
C=Matrix_Multiply(size,noc, A, B, C);
} else {
//
for(int i=0; i<size/2; i++) {
for(int j=0; j<size/2; j++) {
for(int k=0; k<noc; j++) {
A11[i][j][k] = A[i][j][k] ;
A12[i][j][k] = A[i][j+size/2][k] ;
}
}
}
我的代码是这样的:我不知道问题是什么。
错误:断言失败:(size_type(idx - index_bases [0])&lt; extents [0]),函数访问,文件/usr/local/Cellar/boost/1.65.1/include/boost/multi_array/base .hpp,第136行。
答案 0 :(得分:1)
在最里面的循环中你有:
for (int k = 0; k < noc; j++) {
您的意思是++k
而不是++j
:
for (int k = 0; k < noc; ++k) {
我也简化了主要内容:
int dim[] = {size,size,noc};
array_type A(dim), B(dim), C(dim);
默认情况下,值初始化完成。
multi_array
的想法是数组自我描述,而不是传递单独的参数(size
和noc
,例如。):
array_type Strr(array_type A, array_type B) {
static_assert(array_type::dimensionality == 3, "static invariant");
size_t size = A.shape()[0];
size_t noc = A.shape()[2];
assert(A.shape()[0] == A.shape()[1]);
assert(std::equal_range(A.shape(), A.shape()+3, B.shape()));
assert(std::equal_range(A.shape(), A.shape()+3, C.shape()));