为什么数组不打印第一个元素? 我试图实现一个类似于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; };
下面是addEntryconst字符串&s的代码:为什么数组不打印第一个元素? 我试图实现一个类似于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; };,c++,arrays,dynamic-memory-allocation,C++,Arrays,Dynamic Memory Allocation,下面是addEntryconst字符串&s的代码: 这两条线是一个主要问题,将导致后续未定义的行为: dynamicArray = tempArr; delete[] tempArr; 在第一行之后,分配给dynamicArray的是指向同一内存的两个指针dynamicArray和tempArr 通过执行delete[]tempArr,可以使dynamicArray指针无效 您可能应该首先删除为dynamicArray分配的旧内存,然后执行分配: delete[] dynamicArray;
这两条线是一个主要问题,将导致后续未定义的行为:
dynamicArray = tempArr;
delete[] tempArr;
在第一行之后,分配给dynamicArray的是指向同一内存的两个指针dynamicArray和tempArr
通过执行delete[]tempArr,可以使dynamicArray指针无效
您可能应该首先删除为dynamicArray分配的旧内存,然后执行分配:
delete[] dynamicArray;
dynamicArray = tempArr;
这两条线是一个主要问题,将导致后续未定义的行为:
dynamicArray = tempArr;
delete[] tempArr;
在第一行之后,分配给dynamicArray的是指向同一内存的两个指针dynamicArray和tempArr
通过执行delete[]tempArr,可以使dynamicArray指针无效
您可能应该首先删除为dynamicArray分配的旧内存,然后执行分配:
delete[] dynamicArray;
dynamicArray = tempArr;
在addEntry的末尾,将tempArr指定给DynamicCarray,然后将其删除。这意味着您正在读取已释放的内存,这将导致未定义的行为。您应该删除不再需要的旧dynamicArray,而不是删除tempArr:
void DynamicStringArray::addEntryconst字符串(&s){
string*tempArr=新字符串[size+1];
forint i=0;i