30/09/2018, 18:18
Lỗi: "CRT detected that the application wrote to memory after end of heap buffer."
Em mới học OOP (C++) . và đang học về hàm dựng, nhưng khi build chạy chương trình thì bị lỗi như thế này.
đây là hàm constructor của em:
HocSinh()
{
_maso = new char[7];
strcpy(_maso, "0000000");
_hoten = new char[50];
strcpy(_hoten, "No name");
_diachi = new char[100];
strcpy(_diachi, "No adress");
_diemtoan = _diemvan = 0.0;
}
và hàm ouput:
void HocSinh::Output()
{
cout << "
Ho Ten: " << _hoten;
cout << "
Mssv: " << _maso;
cout << "
Dia chi: " << _diachi;
cout << "
Diem van: " << _diemvan;
cout << "
Diem Toan: " << _diemtoan;
}
Cho em hỏi là lỗi ở chỗ nào và sửa như thế nào ạ ?
Bài liên quan
Hàm strcpy sẽ copy kèm theo kí tự null (\0) ở cuối chuỗi vào chuỗi đích, do đó cần tăng lượng kí tự từ 7 -> 8 để tránh tràn bộ nhớ. Hơn nữa chuỗi muốn in ra bằng “cout <<” thì chuỗi cũng cần có kí tự null ở cuối để xác định được điểm dừng nếu không sẽ đọc tràn ra ngoài vùng nhớ cần in.
Đây là thông tin về hàm strcpy:
Copy string
Copies the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point).
To avoid overflows, the size of the array pointed by destination shall be long enough to contain the same C string as source (including the terminating null character), and should not overlap in memory with source.
Tham khảo:
cảm ơn anh nhé… tại trước đó ít xài tới hàm này nên không biết nhiều về nó
Còn mốt vấn đề nữa là hàm Input() của mình… như thế này:
mình
Input()
xong rồi xử dụngOutput()
thì nó lại bị lỗi y vậyhàm
gets
cũng nguy cơ lắm, vì nó không có giới hạn số lượng ký tự nhập vào. Dùngfgets
điTham khảo:
cảm ơn anh, em định dùng
string
cho bài này, cơ mà thầy lại không cho :’( bắt dùng char*Dùng char mới hiểu được bản chất vấn đề chứ hehe