我的指针和对双打的引用都有问题。
我想按名称访问QVector中的元素。该向量包含双精度:
QVector<double> properties;
properties.append(28.0);
properties.append(1.0);
properties.append(44.0);
properties.append(0.001);
现在我创建指向双打的指针:
double* Amplitude;
double* Frequency;
double* PhaseDifference;
double* Stepsize;
这些指针应提供对载体元素的访问:
Amplitude = &properties[0];
Frequency = &properties[1];
PhaseDifference = &properties[2];
Stepsize = &properties[3];
在我看来,取消引用这些指针应该给我正确的值,但事实并非如此。在这种情况下,我得到前两个指针的零,第三个和第四个是正确的。
我尝试在向量中使用更多条目,结果是只有最后两个条目具有正确的值。那里出了什么问题?
我在构造函数中创建并打印值。打印矢量给出正确的值!
有人有想法吗?
答案 0 :(得分:4)
您的指定指针实际上是 iterators 。迭代器可以 无效 。例如,无论何时调整向量大小,或向其中插入任何内容,等等。查找特定向量类型的迭代器失效的确切规则,在本例中为QVector
,并查看是否已执行任何这些迭代器在打印之前使操作无效。顺便提一下,取消引用无效的迭代器可能会导致未定义的行为。
答案 1 :(得分:3)
你一定做错了。这有效:
#include <QVector>
#include <QDebug>
int main()
{
QVector<double> v;
v.append(2.0);
v.append(18.4);
double* val1 = &v[0];
double* val2 = &v[1];
qDebug() << *val1 << "\n" << *val2 << "\n";
}
出现问题的原因是:
答案 2 :(得分:2)
初始化时,应设置向量的大小。一切都会好的,直到你更改它们(推/弹)后,你的指针中的值将是未定义的。
答案 3 :(得分:1)
您的指针可能在获取指针和实际使用它们之间失效。
如果调整QArray
的大小(通过添加比当前可容纳的更多元素),就会发生这种情况。