Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么数组不打印第一个元素? 我试图实现一个类似于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 - Fatal编程技术网

为什么数组不打印第一个元素? 我试图实现一个类似于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++中字符串数组的类。以下是该课程的代码: 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;

下面是addEntryconst字符串&s的代码:


这两条线是一个主要问题,将导致后续未定义的行为:

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 void DynamicStringArray::addEntryconst字符串(&s){ string*tempArr=新字符串[size+1]; forint i=0;i