【问题标题】:C++ How to resize a Pointer Array to add new values the best?C ++如何调整指针数组的大小以最好地添加新值?
【发布时间】:2021-06-18 07:29:47
【问题描述】:

大家好,我必须为类创建一个程序,该程序应该将浮点值存储在类的一个指针数组中。我查了指针是如何工作的,我想我明白了。或者也许我没有?因为我的代码确实很奇怪。

 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 应该存储所有内容,而整数mdi 是指针“当前大小”的计数器。 方法setDaten 获取一个带有一些浮点数的数组,然后将其存储在messdaten(日期)和数组的大小(大小)中以在运行时创建它。 然后来自messdaten 的所有数据都存储在temparray 中,因此我可以删除messdaten 以使用新的正确大小创建它。之后,一切都再次转移到messdaten。 当我运行代码时,我得到:

这两个数组在两个单独的函数调用中传递:

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};

这是我得到的输出:

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

但是我得到了错误的输出?我不明白为什么......请帮忙。 (注意我不允许使用向量)

【问题讨论】:

  • 是的,因为这应该是关于如何在 c++ 中使用指针的练习。

标签: c++ arrays class pointers methods


【解决方案1】:

线

                *(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]; 
            }

也是为了避免内存泄漏:

  • 在函数setDaten的末尾添加delete[] temparray;
  • messdaten的初始化添加到nullptr并在messdaten = new float[size+mdi];之前添加delete[] messdaten;

【讨论】:

  • 您好,谢谢。我之前已经尝试在正确的位置使用“删除”语句,但是当我出于某种原因使用它们时,当我通过简单输出值的函数粉碎 messdaten 时,我没有得到任何输出。难道我做错了什么? “将messdaten的初始化添加到nullptr”是什么意思?我应该这样做:“float * messdaten = nullptr”???谢谢
  • 不关注The Rule of Three会在复制对象时出现问题。你对初始化的理解是对的。
猜你喜欢
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 2020-04-01
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多