Vấn đề về phần tử của mảng?


Kiểu mảng int ngay từ đầu em chỉ cung cấp cho nó 1 ô nhớ. nhưng khi nhập lại có thể nhập được đến 3 ô và vẫn có thể truy xuất đúng giá trị của 3 ô nhớ. Mọi người cho em xin giải thích về trường hợp này với ạ. em xin cảm ơn

Đó là thứ gây ra việc mất an toàn bộ nhớ. Mảng đã truy xuất vượt ra phạm vi của nó, sang ô nhớ khác, những thay đổi này có thể dẫn đến chương trình xảy ra lỗi, hoặc sai sót dữ liệu.

Một số ngôn ngữ (bậc cao) khi truy xuất ngoài phạm vi mảng sẽ bị quăng ra ngoại lệ.

2 Likes

Bạn xin có 1 ô nhớ mà lại dùng sang ô nhớ khác, không có gì đảm bảo rằng ô nhớ ấy đang không bị hoặc sẽ không bị chương trình khác sử dụng. Nếu hệ điều hành không tốt thì rất nguy hiểm. Nên tránh.

2 Likes

mình biết việc truy xuất trái phép có thể gây không an toàn khi cho output dữ liệu nhưng mình đã test thử nhiều lần. kết quả truy xuất không hề bị sai và ide cũng ko hề báo lỗi cho user. Hơi khó hiểu

Đấy là nó chưa sai chứ không phải nó không sai. Bạn vừa mới nhập dữ liệu vào thì làm gì đã có gì đè lên phần dữ liệu đó, ngoài ra còn có nhiều nguyên nhân khác khiến cho hệ điều hành cung cấp RAM nhiều hơn những gì ứng dụng yêu cầu.

Index ra ngoài phạm vi plain array là undefined behaviour, tức là tùy vào implementation detail bên dưới rồi, như Windows + MSVC sẽ cho kết quả khác, Unix + Clang cho kết quả khác, etc. Mấy thứ như fflush(stdin); cũng vậy.

1 Like

ít lâu bạn học struct ấy tạo 1 biến kiểu riêng khoảng 3 4 thành phần rồi khai báo mảng 20 30 phần tử xong lại truy cập phần tử 30 thì nó chạy không được ngay

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?