30/09/2018, 16:51
[C++] Memcpy.asm Unhandler string
Code : http://pastebin.com/7UxQWPqg
/////////////////////////// Input.cpp ////////////////////////////////
// _numberList là biến cho số khách hàng có trong danh sách sổ quản lý
void Load(char* filename, KhachHang* & List, int& _numberList)
{
fstream file;
file.open(filename, ios::in | ios::binary);
// Dòng đầu tiên của file quy định số khách hàng
// load số lượng khách hàng có trong danh sách quản lý
file >> _numberList;
file.ignore(3, '
');
// Cấp phát bộ nhớ
List = (KhachHang*)malloc(_numberList * sizeof(KhachHang));
// Load thành viên
// thông tin thành viên được quy định bằng một dòng với cú pháp MaSo-Ten-CMND-NgayGui-SoTien-KyHan
// phù hợp với định dạng
for (int i = 0; i < _numberList; i++)
{
string getString;
getline(file, getString, '
');
stringstream ss(getString);
string temp;
getline(ss, temp, '-');
List[i].MaSo = stoll(temp, nullptr); // default decimal
getline(ss, temp, '-');
List[i].Ten = temp;
getline(ss, temp, '-');
List[i].CMND = stoll(temp, nullptr);
getline(ss, temp, '-');
List[i].NgayGui = temp;
getline(ss, temp, '-');
List[i].Sotien = stoll(temp, nullptr);
getline(ss, temp, '-');
List[i].KyHan = stoi(temp);
}
file.close();
}
//////////////////////// Config.h ////////////////////////
typedef struct KhachHang
{
long long MaSo;
string Ten;
long long CMND;
string NgayGui;
long long Sotien;
int KyHan;
};
//////////////////////////// Main.cpp ////////////////////////
KhachHang* List;
int _numberList;
int main()
{
// Load data
Load("data.bin", List, _numberList);
return 0;
}
Sao thay đổi giá trị của string List[i].Ten là xuất hiện lỗi này.
Em search stackoverflow cũng có nhưng chưa có ai trả lời.
Lỗi :
Bài liên quan
Lỗi này có vẻ như truy xuất vùng nhớ sai do thao tác sai trên mảng. Để Đạt xem code thử? Sao không dùng markdown post lên forum ấy
Điểm lưu ý thứ nhất là List được tạo ra mà không bị hủy đi, sẽ gây leak.
Tại sao @snt2523 biết là thay đổi
Ten
gặp lỗi này? Thử comment cái dòngTen
đi xem còn lỗi không?1.Em muốn thiết kế ví dụ như : Đọc từ file danh sách các khách hàng, -> xử lý -> ghi lại xuống file. Vì vậy e tính hủy list khi đã xử lý xong.
2.Em có test thử trước khi vào vòng lặp for đấy.
thì bị lỗi ngay và khi đặt breakpoint thì tới chỗ đấy thì thông báo memcpy.asm
long long
thì sao chép vào cấu trúc không sao cả. chỉ khi gặpTen
vàNgayGui
kiểu string thì thông báo lỗi thôi @ltdNên hủy trước hoặc sau khi
file.close();
Ok, để Đạt xem lại code.
Chỗ sai là chỗ này
Bởi vì bên trong struct
KhachHang
mình sử dụngstring
. Màstring
không phải là kiểu dữ liệu cơ bản (tức int, char). Nên việc khởi tạo nó không thể sử dụngmalloc
vốn dĩ chỉ cấp vùng nhớ. Mà ta phải sử dụng hàmnew
trong C++.Đồng thời
string
cũng là class của C++.Sửa lại kiểu như thế này là được.
Tr đất @@
cám ơn anh rất nhiều !
Em code bị lẫn lộn giữa C và C++ quá. Cần xem lại kiến thức ngôn ngữ nhé. Anh thấy học vậy không ổn.
Ví dụ như nếu em code C. Em cần ghi
typedef struct
, nhưng C++ thì chỉ cầnstruct
.Hoặc nếu em dùng
string
thì em nên dùngclass
vànew
chứ đừng dùngstruct
vàmalloc
.Em đang cố gắng xem lại.
Vì em đang học KTLT nên cũng chưa rõ class.