gpt4 book ai didi

C++错误读取字符串的字符

转载 作者:行者123 更新时间:2023-11-28 06:14:32 26 4
gpt4 key购买 nike

我正在尝试向我的包含动态数组的对象添加一个数组

MyCollection.h

    template <typename T>
MyCollection<T>::MyCollection(int size)
{
arraySize = size;
anArray = new T[size];
}

template <typename T>
MyCollection<T>::MyCollection(MyCollection<T>& coll)
{
arraySize = coll.arraySize;
anArray = new T[arraySize];

for (int i = 0; i < arraySize; i++)
{
SetValue(coll.GetValue(i), i);
}
}

template <typename T>
MyCollection<T>::MyCollection(T* myArray, int size)
{
anArray = myArray;
arraySize = size;
}




template<typename T>
void MyCollection<T>::AddAll(T pArray[], int size)
{
int plusSize = size - 1;
int arrayIterator = 0;
arraySize += size;


for (int i = size; i < arraySize - plusSize; i++)
{
anArray[i] = pArray[arrayIterator];
arrayIterator++;
}

}

主要

MyCollection<string> B = MyCollection<string>(new string[3], 3);
B.SetValue("C", 0);
B.SetValue("D", 1);
B.SetValue("E", 2);

string C[3];
C[0] = "X";
C[1] = "Y";
C[2] = "Z";

B.AddAll(C, 3);
B.Display();

在 AddAll 方法中,我遇到访问冲突错误。当我添加 watch anArray[i] = 时。知道为什么会这样吗?复制构造函数有问题吗?

最佳答案

AddAll() 中,您需要调整原始数组 anArray 的大小,没有调整大小(您只需更改 arraySize< 的数值,但不要分配更多内存)。所以你需要类似的东西

delete[] anArray; 
// ...
anArray = new T[arraySize];

你可能还会想是否要将旧元素复制到新分配的数组中,这样的话你首先要用一个临时指针重新分配,然后复制进去,然后删除原来的anArray,最后将临时指针分配给原始的 anArray,类似于:

// save the old size
int oldSize = arraySize;
arraySize += size;
T* tmp = new T[arraySize];
// copy from anArray into tmp, use oldSize
// for(...){...}
delete[] anArray;
anArray = tmp;

关于C++错误读取字符串的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30598624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com