Hỏi về cấp phát bộ nhớ động cho mảng char *

Mình có 1 vấn đề như thế này, ví dụ cấp phát chỉ 14 ô nhưng trình biên dịch tự cấp phát nhiều hơn 14, khi thì 16, khi thì 18. Có ai biết có vấn đề gì xảy ra ko ạ? Như trong hình những phần giống chữ H là có 14 ô, còn lại toàn là rác. Ai giúp mình với ạ.

Đưa code của bạn lên đây cái đã.

1 Like

Hi Тханг.

  1. Không phải trình biên dịch cấp phát. (Chương trình yêu cầu hề điều hành cấp phát).
  2. Khi bạn cấp phát 14 không có nghĩa là ram của bạn chỉ có 14. (Nhà bạn có 10 phòng và được chia cho 1 phòng không có nghĩa là nhà bạn có 1 phòng.). Các phần phái sau là các ô nhớ liền kề với vùng 14 bạn cấp phát.
  3. Vậy tại sao bạn lại thấy 16-18 ô. Là do công cụ debug khi hiện giá trị vùng nhớ với kiểu char * sẽ in ra tất cả các ký tự cho đến khi gắp ký tự /0.
2 Likes

Cảm ơn bạn. Mình vẫn thắc mắc bản chất của việc “cấp phát ô nhớ” là thế nào?
Ví dụ char arr[5];
vậy windows sẽ cấp cho 5 ô nhớ, nhưng nếu mình truy cập arr[6] thì vẫn đc? Vậy bản chất của arr[5] là gì?
Tương tự với việc

char* arr;
arr = new char [5];

Vậy bản chất của việc này là gì? Cảm ơn bạn.

Là bạn đc cấp “quyền” sử dụng bộ nhớ, giống như đc cấp quyền sử dụng đất.
Bạn vẫn có thể lấn chiếm đất của người khác, và trong bộ nhớ máy tính thì khác với đời thật: không tính trước đc điều gì, có thể bạn sẽ bị lỗi access violate, hoặc là ghi đè vào dữ liệu khác của chính chương trình.

3 Likes

Cảm ơn bạn. :grinning:

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