我是一名Java程序员,正在研究我的第一个C ++项目,我正在努力理解如何处理数组。我正在尝试编写一个结构上等同于以下代码的程序。但是,在我的实际项目中,class A
和struct B
在头文件中声明。我理解这一点的方式是语句b.arr[2]
将数组b.arr
实例化为长度为2.然而,当我按原样运行以下代码时,我得到错误exited with non-zero status
。当我注释掉用于将b.arr [1]设置为等于a2的行时,它运行正常。为什么这样,我怎么能这样做?另外,有没有办法可以将b.arr数组重新定义为不同的长度?我环顾四周,但我找不到什么似乎可以解决这个具体问题。
class A {};
struct B {
A *arr[];
};
int main() {
B b;
b.arr[2]; // instantiates array to be of length 2?
A a1;
A a2;
b.arr[0] = &a1;
b.arr[1] = &a2; // RUNS FINE WITHOUT THIS LINE
}
谢谢!
顺便说一句,我是为arduino库编写的,所以我不能使用std命名空间。
答案 0 :(得分:1)
b.arr[2]; // instantiates array to be of length 2?
这是不正确的。
它引用了数组的第三个元素,并且对元素的值没有任何作用。
该程序调用未定义的行为,因为当它未被初始化为指向有效内存时访问b.arr
的元素。
答案 1 :(得分:0)
b.arr[2];
这已经是未定义的行为。访问尚未分配的内容。这意味着所有赌注都已关闭,您不能依赖任何代码以任何特定方式行事。
如果你想存储A指针,请尝试使用std::vector<A*>
或std::array<A*>
作为静态长度容器。