繁体   English   中英

C++ 如何调整指针数组的大小以最好地添加新值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM