Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;如何调整指针数组的大小以最好地添加新值?_C++_Arrays_Class_Pointers_Methods - Fatal编程技术网

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

C++ C++;如何调整指针数组的大小以最好地添加新值?,c++,arrays,class,pointers,methods,C++,Arrays,Class,Pointers,Methods,大家好,我必须为类创建一个程序,该程序应该在类中的一个指针数组中存储浮点值。我查了一下指针的工作原理,我想我明白了。也许我没有?因为我的代码做了一些奇怪的事情 private: float * messdaten; int mdi = 0; public: CMesswerte(){ } void setDaten(float daten[], int size) { float

大家好,我必须为类创建一个程序,该程序应该在类中的一个指针数组中存储浮点值。我查了一下指针的工作原理,我想我明白了。也许我没有?因为我的代码做了一些奇怪的事情

 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;
        }
这是我得到的输出:

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
但是我得到了一个错误的输出?我不明白为什么。。。请帮忙。 (注意我不允许使用向量)

                *(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=mdi;i

for(int i=0;i
另外,为了避免内存泄漏,请执行以下操作:

  • 添加
    delete[]临时数组在函数的末尾
    setDaten
  • messdaten
    的初始化添加到
    nullptr
    并添加
    delete[]messdaten之前
    messdaten=新浮点[size+mdi]

是的,因为这应该是关于如何在C++中使用指针的一个摘录。我以前已经尝试过在正确的位置使用“delete”语句,但是当我出于某种原因使用它们时,当我通过只输出值的函数粉碎messdaten时,我没有得到任何输出。我做错什么了吗?“将messdaten的初始化添加到nullptr”是什么意思?我是否应该这样做:“float*messdaten=nullptr”???THX复制对象时,不遵循将导致问题。您对初始化的理解是正确的。
                for(int i=mdi; i < mdi+size; i++) {
                *(messdaten + i) = daten[i]; 
            }
                for(int i=0; i < size; i++) {
                *(messdaten + size + i) = daten[i]; 
            }