我在測試頭文件中的代碼時遇到了各種內存錯誤。請幫助我讓我知道同樣的錯誤。謝謝!C++代碼中的內存分配錯誤
有問題的代碼是下面代碼塊中的代碼。它的評論非常自我解釋。
非常感謝您的幫助!
#include <algorithm>
class sorted_sc_array {
public:
sorted_sc_array() : size_(0), ptr_(nullptr), arr_len(1000) {
ptr_ = new signed char[arr_len];
}
~sorted_sc_array() { delete[] ptr_; }
// IMPLEMENT ME (DONE!!!! SOME EDITS REQD)
sorted_sc_array(const sorted_sc_array& A) {this->size_ = A.size_; this->ptr_ = A.ptr_; /* change this to match the definition of operator=() function */}
// IMPLEMENT ME (DONE!!!!)
sorted_sc_array& operator=(const sorted_sc_array& A) {
if (this == &A) return *this;
delete[] ptr_;
size_ = A.size_;
if (size_ == 0) ptr_ = nullptr;
else {
ptr_ = new signed char[size_];
std::copy(A.ptr_, A.ptr_ + size_, ptr_);
}
return *this;
}
// RETURNS SIZE OF THE ARRAY (i.e. HOW MANY ELEMENTS IT STORES)
int size() const { return size_; }
// RETURNS RAW POINTER TO THE ACTUAL DATA, CAN BE INVOKED AT ANY TIME
const signed char* data() const { return ptr_; }
// IMPLEMENT ME: AFTER INSERT COMPLETES THE ARRAY MUST BE IN ASCENDING ORDER (TBD!!!)
void insert(signed char c) {
if (size_ < arr_len) {
ptr_[size_++] = c;
std::sort(ptr_, ptr_ + size_);
}
else {
int arr_len_new = arr_len*2;
ptr_ = new signed char[arr_len_new];
std::copy(ptr_, ptr_ + size_, ptr_);
ptr_[size_++] = c;
std::sort(ptr_, ptr_ + size_);
}
// maybe use std::sort (myvector.begin(), myvector.end());
// if inefficient, use binary insertion
}
private:
int size_; // size of the array
signed char* ptr_; // pointer to the array
unsigned int arr_len; // dynamic mem alloc for array
}; // class sorted_sc_array
你得到什麼錯誤?通過在調試器中運行代碼學到了什麼? – Barmar
「各種內存錯誤」太泛化了。更好地指定它 – Amadeus
解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –