[英]C++ How to resize a Pointer Array to add new values the best?
大家好,我必须为 class 创建一个程序,该程序应将浮点值存储在 class 的一个指针数组中。 我查了指针是如何工作的,我想我明白了。 或者也许我没有? 因为我的代码做了一些奇怪的事情。
private:
float * messdaten;
int mdi = 0;
public:
CMesswerte(){
}
void setDaten(float daten[], int size) {
float* temparray;
temparray = new float[mdi];
for(int i=0; i < mdi; i++){
*(temparray + i) = *(messdaten + i);
}
messdaten = new float[size+mdi];
for(int i=0; i < mdi; i++)
*(messdaten + i) = *(temparray + i);
for(int i=mdi; i < mdi+size; i++) {
*(messdaten + i) = daten[i];
}
mdi=mdi+size;
}
所以浮动指针变量messdaten
应该存储所有的东西,integer mdi
是指针“当前大小”的计数器。 方法setDaten
获取一个带有一些浮点数的数组,然后将其存储在messdaten
(daten) 和数组的大小 (size) 中以在运行时创建它。 然后, messdaten
中的所有数据都存储在temparray
中,因此我可以删除messdaten
以使用新的正确大小创建它。 之后,一切都再次转移到messdaten
。 当我运行代码时,我得到:
这两个 arrays 在两个单独的函数调用中传递:
float Daten_1[5] = { 1.5, 2.3, 5.5, 0.6, 7.5};
float Daten_3[5] = {2.4, 1.5, 5.4, 2.3, 7.5};
这是我得到的 output:
1 - 1.5
2 - 2.3
3 - 5.5
4 - 0.6
5 - 7.5
6 - 0
7 - 3.36312e-44
8 - 0
9 - 1.5
10 - 2.3
但是我弄错了 output? 我不明白为什么......请帮忙。 (注意我不允许使用向量)
线
*(messdaten + i) = daten[i];
是错的。 daten
的索引应该从 0 开始,但这里它实际上是从mdi
开始的。
它应该是:
*(messdaten + i) = daten[i - mdi];
另一种选择正在改变
for(int i=mdi; i < mdi+size; i++) {
*(messdaten + i) = daten[i];
}
至
for(int i=0; i < size; i++) {
*(messdaten + size + i) = daten[i];
}
还要避免 memory 泄漏:
delete[] temparray;
在 function setDaten
的末尾。messdaten
的初始化添加到nullptr
并添加delete[] messdaten;
在messdaten = new float[size+mdi];
.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.