[Lập trình C++] Hiện thực và sử dụng hàm realloc (Cấp phát lại bộ nhớ cho con trỏ trong lập trình C++ )

– Mảng là phần kiến thức rất quan trọng trong các ngôn ngữ lập trình , đặc biệt là ngôn ngữ C++ với việc làm sao để quản lí tốt vùng nhớ – đây là vấn đề mà các lập trình viên rất e dè và cẩn thận khi nghiên cứu về  lập trình C++ . Đây có thể nói là tiền đề để các lập trình viên làm quen với con trỏ và tiếp cận con trỏ trong lập trình C++. Việc cấp phát mảng động đòi hỏi chúng ta cần phải nắm vững con trỏ và linh hoạt trong quá trình sử dụng nó. Bài viết này tôi xin đề cập đến vấn đề là làm thế nào để cấp phát lại bộ nhớ động cho con trỏ trong lập trình C++ mà không cần dùng hàm realloc(< Vùng nhớ cần cấp phát>, < Kích thước cần cấp phát>).

– Đồng thời tôi cũng sẽ kết hợp việc demo code mẫu của 2 hàm :

+ Hàm thêm phần tử vào mảng động.

+ Hàm xóa phần tử khỏi mảng động .

– Cách tạo 1 menu trong C++. Đây là vấn đề mà tôi nghĩ rằng chưa có bài hướng dẫn nào đề cập đến, tạo ra 1 menu để chúng ta chọn lựa thì có vẻ làm cho chương trình chúng ta trở nên rõ ràng và bắt mắt hơn.

Kết luận:

-Đây là bài viết mà tôi nghĩ rằng nó rất là chi tiết , vì tôi đã comment giải thích rõ ràng từng vấn đề. Chúc các bạn học tốt. Tôi sẽ cố gắng làm 1 video hướng dẫn lại bài viết này trong thời gian sớm nhất.

– Thắc mắc gì thì các bạn cứ comment bên dưới , tôi sẽ trả lời cụ thể – chi tiết và dễ hiểu nhất cho các bạn.

 

Share
  • duyhung

    Tại hàm Cap_Phat_Lai_Bo_Nho, tại sao không delete[] a rồi mới xin cấp phát lại.
    Trường hợp delete rồi mới xin cấp phát có phát sinh lỗi gì hay không.
    Vùng nhớ a trỏ tới trước đó vẫn còn hay tự động được xóa.
    Nếu vùng nhớ còn, thì làm sao để xóa nó.

    • Hi Lua

      Chào bạn. Đây là câu hỏi mà mình đang chờ đợi các bạn hỏi
      – Thứ nhất: mình cố tình không xóa vùng nhớ a trước khi cấp phát lại bộ nhớ, nhưng mà nếu như trước khi chúng ta cấp phát lại vùng nhớ a mới, mà chúng ta quên xóa đi vùng nhớ a cũ thì sẽ gây ra lãng phí bộ nhớ.
      – Thứ 2: delete [] a thì sẽ không bị lỗi gì hết
      – Thứ 3:
      + Khi cấp phát ra vùng nhớ động mà chúng ta không sử dụng nữa , chúng ta quên xóa vùng nhớ đó thì nó vẫn còn tồn tại trong bộ nhớ.
      + Vì chúng ta dùng toán tử new là toán tử cấp phát ra vùng nhớ động trong bộ nhớ của C++, vì vậy vùng nhớ khi được người lập trình cấp phát thì đó sẽ là vùng nhớ do chính người lập trình quản lí, CPU không can thiệp vùng nhớ đó. Còn các biến như int , float… thì do CPU quản lí nên là khi kết thúc chương trình – CPU tự động giải phóng. Muốn xóa vùng nhớ động thì ta dùng toán tử delete []
      Cảm ơn bạn đã theo dõi bài viết của mình. Mong bạn có nhiều các câu hỏi đóng góp

  • Hà Đinh

    thế nếu đơn giản như nhập vào một danh sách tên cấp cho mỗi cái tên 30 kí tự mà chỉ dùng hết 10 ki tự thì phả xử li thế nào để xóa đi địa chỉ của các biến không dùng tới để đỡ tốn bộ nhớ ạ

  • disqus_sjWEidBxHQ

    https://uploads.disquscdn.com/images/072487b5f8967dcad39567d67f717bcdfa3450db27610fd5668e4ff17168e234.png
    cho em hỏi chỗ hàm cap_phat_lai_bo_nho mình cấp phát lại a = new int[n + 1] thế thì sau khi thực hiện xong hàm xoa() mình gọi lại hàm cap_phat_bo_nho() thì làm sao nó xóa đi ô nhớ ạ

Share