Open anyingiit opened 3 years ago
在Play-with-Data-Structures/02-Arrays/09-Amortized-Time-Complexity/Array.h:148中
void resize(int newCapacity) { T *newData = new T[newCapacity]; for (int i = 0; i < size; ++i) { newData[i] = data[i]; } data = newData; capacity = newCapacity; newData = nullptr; // 毕竟已经等于nullptr了, 释放一下好像也没有什么坏处, 但是我猜测这里你不是想干这件事, 因为nullptr不需要使用 []来释放 delete []newData; }
这里是否应该释放oldData的数据, 而不是释放newData的数据? 因为data其实指向了newData? 自认为正确的代码
void reSize(int newCapacity){ auto *newData = new T[newCapacity]; auto *oldData = data; for (int i = 0; i < size; i++) { newData[i] = data[i]; } data = newData; capacity = newCapacity; delete []oldData; }
本人也是初学者, 如果说错了请见谅...
✔
newData指针在调用delete[]之前被设置为nullptr,这是错误的做法,因为在这之后再调用delete[]就相当于对一个空指针进行删除操作,会导致未定义的行为。因此,需要将delete[]操作放在设置newData为nullptr之前,即:
delete [] newData; newData = nullptr; 因此,正确的代码应该是:
void resize(int newCapacity) { T *newData = new T[newCapacity]; for (int i = 0; i < size; ++i) { newData[i] = data[i]; } delete[] data; // 释放原内存 data = newData; capacity = newCapacity; } 这段代码使用delete[]释放原内存,然后将data指针指向newData所指向的新内存块,同时更新capacity的值。这样就完成了将数组空间的容量变成newCapacity大小的操作。
在Play-with-Data-Structures/02-Arrays/09-Amortized-Time-Complexity/Array.h:148中 https://github.com/houpengfei88/Play-with-Data-Structures/blob/89b4e005f3bdfb1720616957af0b30419aabd795/02-Arrays/09-Amortized-Time-Complexity/Array.h#L148
这里是否应该释放oldData的数据, 而不是释放newData的数据? 因为data其实指向了newData? 自认为正确的代码
本人也是初学者, 如果说错了请见谅...