我遇到以下问题。我想创建一个对象的多维数组指针使用boost :: multi_array,但即使我编写的代码编译,当我尝试在Eclipse中运行时,程序终止并且没有打印任何内容。 让我举例说明一个非常小的例子,以防这可能有任何帮助。 所以有以下非常小的简单类:
class example {
public:
example();
virtual ~example();
int a;
};
我只是尝试以下列方式创建和使用此类的多指针:
int main() {
typedef boost::multi_array<example * , 2> array_type1;
array_type1 DE(boost::extents[2][2]);
DE[0][0]->a=6;
DE[1][0]->a=7;
DE[0][1]->a=8;
DE[1][1]->a=9;
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
请注意,当我使用boost / test / minimal.hpp(http://www.boost.org/doc/libs/1_46_1/libs/test/doc/html/minimal.html)运行相同的代码来检查发生了什么,结果主要看起来像这样:
int test_main(int, char*[]){
typedef boost::multi_array<example * , 2> array_type1;
array_type1 DE(boost::extents[2][2]);
DE[0][0]->a=6;
DE[1][0]->a=7;
DE[0][1]->a=8;
DE[1][1]->a=9;
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return boost::exit_success;
}
我收到以下消息:
/usr/include/boost/test/minimal.hpp(123): exception "memory access violation at address: 0x00000008: no mapping at fault address" caught in function: 'int main(int, char**)'
**** Testing aborted.
**** 1 error detected
关于如何解决这个问题的任何建议对我来说都非常有帮助!
答案 0 :(得分:1)
array_type1 DE(boost::extents[2][2]);
DE[0][0]->a=6;
您取消引用DE[0][0]
处的指针,但从未使其事先指向实际的example
实例。