30/09/2018, 16:40
Cấp phát động trong C?
Câu hỏi của thầy em đặt ra và em cũng chưa tìm được câu trả lời cho bài này
Mong mọi người giúp đỡ.
Tại sao đoạn code trên lại không báo lỗi .
Cảm ơn mọi người đã xem topic của mình
Học
Bài liên quan
Vì sizeof(char*) là một số nguyên không âm.
thử printf nó ra coi giá trị của nó là bao nhiêu.
Thực ra kích thước của con trỏ là giống nhau: sizeof(char * ) = sizeof(int * * ) = sizeof( void * ) … Nó là giá trị trỏ đến bộ nhớ nên phụ thuộc vào hệ điều hành của bạn. Vd hệ điều hành 32bit thì nó sẽ dành 32bit để lưu địa chỉ con trỏ. Như thế khi malloc(sizeof(char * )) có thể hệ điều hành của bạn là 32bit , tương đương malloc( 4byte) cho vùng nhớ mà c trỏ đến.
tớ không chắc do tớ cũng đã thử sizeof(char)) thì chương trình trên chạy vẫn ổn không biết tại sao ??
Nếu bạn cấp phát sizeof(char) thường là 1, tức là ứng dụng của bạn đang truy xuất ra bên ngoài vùng nhớ mà nó cấp phát, có thể sẽ không xảy ra lỗi access violation lúc này, tuy nhiên việc truy xuất ra bên ngoài vùng nhớ này rất nguy hiểm có thể gây crash ứng dụng hoặc tệ hơn là gây ra lỗi rất khó xác định do việc ghi đè dữ liệu lên vùng nhớ khác.
Kết luận: việc cấp phát nhưng lại truy xuất ra bên ngoài vùng nhớ đã cấp phát không nhất thiết làm ứng dụng bị lỗi lúc runtime, thay vào đó có thể dẫn đến những kết quả không ngờ tới. Vì vậy việc cẩn thận trong việc cấp phát và sử dụng bộ nhớ là rất quan trọng!