c++ - 为什么数组不打印第一个元素?

标签 c++ arrays dynamic-memory-allocation

我正在尝试实现一个行为类似于C++中的字符串数组的类。这是该类的代码:

class DynamicStringArray{
public:
    DynamicStringArray()
    :dynamicArray(nullptr), size(0){}
    int get_size(){return size;}
    void addEntry(const string& s);
    string operator[](const int &i){return dynamicArray[i];}
private:
    int size;
    string* dynamicArray;
};

这是addEntry(const string& s)的代码:
void DynamicStringArray::addEntry(const string& s){
    string* tempArr = new string[size + 1];
    for(int i = 0; i < size; i++){ tempArr[i] = dynamicArray[i];}
    tempArr[size] = s;
    size += 1;
    dynamicArray = tempArr;
    delete[] tempArr;
}

如果我想在“数组”中打印一个字符串,我将按照我的重载函数使用[]运算符。 但是我的问题是第一个元素没有被打印。为什么会这样呢?
这是我的int main():
DynamicStringArray arr;
arr.addEntry("hello");
arr.addEntry("hey");
cout << arr[0] << endl; // doesn't print anything
cout << arr[1] << endl; // prints hey

最佳答案

addEntry的末尾,您可以将tempArr分配给dynamicArray,然后将分配给。这意味着您正在读取释放的内存,这将导致未定义的行为。除了删除tempArr之外,您还应该删除不再需要的旧dynamicArray:

void DynamicStringArray::addEntry(const string& s){
    string* tempArr = new string[size + 1];
    for(int i = 0; i < size; i++){ tempArr[i] = dynamicArray[i];}
    tempArr[size] = s;
    size += 1;
    delete[] dynamicArray; // Here!
    dynamicArray = tempArr;
}

关于c++ - 为什么数组不打印第一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59533946/

相关文章:

javascript - Jquery 根据元素的查找方式返回元素的 .width()

c++ - 4 维 c++ 数组的动态内存分配以创建 HDF5 数据集

C Malloc 运行时错误

C++ 是否足以在数组后清理 delete[]?

c++ - 如何转发声明一个类的成员函数以在另一个类中使用?

c++ - 预编译头文件的主要用途

c++ - 将表面法 vector 投影到 xy 平面上

android - 在cmake中添加子目录不起作用

ios - 复制对象的可变数组比较

c - 将 PORTD 值存储在 pic18f452 的数组中 (C)