为什么数组不打印第一个元素?
Why is the array not printing the very first element?
我正在尝试实现一个行为类似于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;
}
这两行是一个主要问题,将导致未定义的行为:
dynamicArray = tempArr;
delete[] tempArr;
在第一行之后,分配dynamicArray
你有两个指针(dynamicArray
和tempArr
(指向同一个内存!
通过执行delete[] tempArr
可以使dynamicArray
指针失效。
您可能应该做的是首先删除分配给dynamicArray
的旧内存,然后执行分配:
delete[] dynamicArray;
dynamicArray = tempArr;
相关文章:
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- 如何仅读取文本文件中的第一个值
- 在C++中,如何在第一个"system()"结束后执行第二个"system()"?
- 查找不在标准中的第一个值::设置<int>最小-最大值
- C++:忽略第一个 cin.ignore 之后的输入
- 在C++中打印多个矢量的第一个值
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- C++第一个cout将不会打印
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- OpenGL:第二个VBO破坏了第一个VBO
- 为什么第一个Dynamic_cast没有投射到基类?
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- C++ 为什么程序只读取第一个值
- 在我的第一个C++程序中需要一些帮助(简单)
- 将顶部堆栈元素传输到第二个堆栈的第一个
- 获取不等于特定值的向量的第一个N元素
- 如何将std ::映射的第一个N元素复制到另一个地图
- 如何在C中获取char阵列的第一个X元素?提升效果是否有改进的方法