01/10/2018, 16:42
Thắc mắc về hàm malloc trong VS2017
Chào mấy bác, cho em hỏi là hàm malloc thực sự cấp cho bao nhiêu bộ nhớ vậy? Em khai báo một con trỏ và cấp cho nó 1 ô nhớ 1 byte thôi nhưng mà em truy cập và chỉnh sửa được đến 10 ô nhớ trong đó lận. Chương trình của em đây:
int main()
{
char *ptr = (char *)malloc(1);
for (int i = 0; i < 10; i++)
{
ptr[i] = i + 1;
printf("%d ", ptr[i]);
printf("%d
", &ptr[i]);
}
_getch();
}
Bài liên quan
Hàm malloc sẽ cấp 1 khối nhớ với kích thước là kích thước của type * số lượng phần tử muốn cấp phát.
ngôn ngữ C/C++ tối ưu hóa rất nhiều để tăng hiệu quả xử lý miễn là người dùng hiểu mình đang làm cái gì. với 1 con trỏ khi trỏ tới 1 ô nhớ, nó sẽ đọc cái ô nhớ này, không đúng type là crash ngay.
Thường thì hàm malloc sẽ cấp đủ số byte bộ nhớ mà bạn yêu cầu, tuy nhiên tùy vào hệ thống và compiler mà hàm malloc có thể cấp nhiều hơn số byte mà bạn mong muốn do cơ chế alignment của hệ thống. Ví dụ chương trình của bạn chỉ cần 1 byte nhưng có thể hàm malloc cấp cho tận 4 bytes (system 32bit).
Trong chương trình của bạn chạy được thì có thể là do những vùng nhớ phía sau vùng nhớ 1 byte mà bạn cấp phát bằng malloc chưa có chương trình nào khác sử dụng, nếu như đã có chương trình khác sử dụng sẽ gây ra crash.