Làm thế nào nguy hiểm là truy cập vào một mảng bên ngoài giới hạn của nó (trong C)? Đôi khi có thể xảy ra khi tôi đọc từ bên ngoài mảng (bây giờ tôi hiểu rằng sau đó tôi truy cập bộ nhớ được sử dụng bởi một số phần khác trong chương trình của tôi hoặc thậm chí ngoài điều đó) hoặc tôi đang cố gắng đặt giá trị cho một chỉ mục bên ngoài mảng. Chương trình đôi khi gặp sự cố, nhưng đôi khi chỉ chạy, chỉ cho kết quả bất ngờ.
Bây giờ những gì tôi muốn biết là, điều này thực sự nguy hiểm như thế nào? Nếu nó làm hỏng chương trình của tôi, nó không quá tệ. Mặt khác, nếu nó phá vỡ một cái gì đó bên ngoài chương trình của tôi, bởi vì bằng cách nào đó tôi đã quản lý để truy cập vào một số bộ nhớ hoàn toàn không liên quan, thì nó rất tệ, tôi tưởng tượng. Tôi đã đọc rất nhiều "bất cứ điều gì cũng có thể xảy ra", "phân khúc có thể là vấn đề tồi tệ nhất" , "đĩa cứng của bạn có thể chuyển sang màu hồng và kỳ lân có thể đang hát dưới cửa sổ của bạn", điều này thật tuyệt, nhưng điều gì thực sự nguy hiểm?
Những câu hỏi của tôi:
- Có thể đọc các giá trị từ cách bên ngoài mảng làm hỏng bất cứ điều gì ngoài chương trình của tôi không? Tôi sẽ tưởng tượng chỉ cần nhìn vào mọi thứ không thay đổi bất cứ điều gì, hoặc nó sẽ thay đổi thuộc tính 'lần cuối được mở' của một tập tin mà tôi tình cờ đạt được?
- Có thể thiết lập các giá trị bên ngoài mảng làm hỏng bất cứ thứ gì ngoài chương trình của tôi không? Từ câu hỏi Stack Overflow này, tôi tập hợp rằng có thể truy cập bất kỳ vị trí bộ nhớ nào, rằng không có đảm bảo an toàn.
- Bây giờ tôi chạy các chương trình nhỏ của mình từ bên trong XCode. Điều đó có cung cấp một số bảo vệ bổ sung xung quanh chương trình của tôi không, nơi nó không thể vươn ra ngoài bộ nhớ của chính nó? Nó có thể gây hại cho XCode không?
- Bất kỳ đề xuất về cách chạy mã lỗi vốn có của tôi một cách an toàn?
Tôi sử dụng OSX 10.7, Xcode 4.6.