cuốn sách gpt4 ai đã làm

c++ - Phát hiện lỗi heap sau khối thông thường

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 00:12:01 30 4
mua khóa gpt4 Nike

Tôi có đoạn mã sau và tôi không hiểu tại sao tôi lại gặp phải lỗi phát hiện lỗi hỏng khi nó chạm vào hàm hủy của Myclass. Tôi tin rằng tôi đang giải phóng bộ nhớ một cách chính xác? ?

#include 
#include
using namespace std;

lớp MyClass{
private:
char* mp_str;
public:
MyClass():mp_str(NULL){}
~Lớp của tôi(){
xóa [] mp_str;
}

void setString(const char* str);
void printString();
};

int chính(){
MyClass* a = MyClass mới();
std::vector myVector;

myVector.push_back(*a);

a->setString("Xin chào thế giới");
myVector[0].setString("Tạm biệt thế giới");

a->printString();
myVector[0].printString();

return 1;
}

void MyClass::setString(const char* const str){
nếu(!str)
return;

size_t len ​​​​= strlen(str);

if(!this->mp_str){
this->mp_str = new char[len];
bộ nhớ(mp_str, 0, len+1);
}
strncpy(mp_str, str, len);
}

void MyClass::printString(){
if(this->mp_str)
cout << mp_str;
khác
cout << "Không tìm thấy chuỗi";
}

biên tập:(mã cố định)

void MyClass::setString(const char* const str){
nếu(!str)
return;

size_t len ​​​​= strlen(str);

if(!this->mp_str){
this->mp_str = char mới[len+1];
bộ nhớ(mp_str, 0, len+1);
}
strncpy(mp_str, str, len);
}

Trong main() tôi cũng đã thêm

xóa một;

Trước khi gọi return 1;

câu trả lời hay nhất

Bạn cần phân bổ độ dài của chuỗi + 1 để tính null. Cài đặt bộ nhớ của bạn là chính xác.

if(!this->mp_str){
this->mp_str = char mới[len+1];
bộ nhớ(mp_str, 0, len+1);
}

Về c++ - Lỗi heap được phát hiện sau khối thông thường, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11676259/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress