尝试调整动态数组的大小并收到一堆错误

问题描述 投票:0回答:1

我基本上需要为 C++ 中的动态整数数组创建一个类,该类具有以下方法:add、get、resize 和 size。这是我到目前为止所拥有的,但我陷入了调整大小方法,并且遇到了一堆错误等。我缺少什么吗?任何帮助,将不胜感激!!预先感谢。

//header file
#pragma once
#ifndef IntVector_h
#define IntVector_h
using namespace std;

class IntVector {
private:
    int* intPtr;
    int vectSize;
    int totElements;
public:
    IntVector();
    void add(int);
    int get(int);
    void resize();
    int size();
};

#endif
//implementation
#include "IntVector.h"
#include <iostream>
#include <string>
using namespace std;

IntVector::IntVector() {
    vectSize = 1;
    totElements = 0;
    intPtr = new int[vectSize];
}

void IntVector::add(int num) {
    if (vectSize == totElements) {
        resize();
        intPtr[totElements] = num;
        totElements++;
    }
    else {
        intPtr[totElements] = num;
        totElements++;
    }
}

int IntVector::get(int index) {
    return intPtr[index];
}

void IntVector::resize() {
    vectSize *= 2;
    int* newArr = new int[vectSize];
    for (int i = 0; i < (vectSize / 2); i++) {
        newArr[i] = intPtr[i];
    }
    delete[] intPtr;
    intPtr = newArr;
    delete[] newArr;
}

int IntVector::size() {
    return totElements;
}
c++ arrays dynamic
1个回答
0
投票

声明

int* newArr = new int[vectSize];
// ...
intPtr = newArr;
delete[] newArr;

错了。

通过赋值

intPtr = newArr
,您仅复制 指针,而不是它指向的内存。因此,在赋值之后,您将有两个指针变量,指向相同的内存。

当您

delete[] newArr
时,您使两个指针都无效。

© www.soinside.com 2019 - 2024. All rights reserved.