30/09/2018, 18:58

Thắc mắc về thay đổi kích thước bộ nhớ đã được cấp phát

anh @ltd cho em hỏi là nếu 1 chương trình em cấp phát bộ nhớ động cho nó ví dụ

int * a = (int *) malloc (n * sizeof(int))

đối với C
còn đối với C++ thì là

int *a = new int[n]

điều em muốn hỏi ở đây là sau khi em đã khai báo giá trị cho n em có thể thay đổi giá trị của nó sau khi khai báo được không và thay đổi như thế nào trong C++?
.
em đọc tài liệu trên cpluspluss rằng nếu muốn thay đổi kích thước bộ nhớ đã được cấp phát trong C ta có thể dùng realloc để cấp phát thêm vùng nhớ cho con trỏ để nó quản lý.
Vậy trong C++ ngoài new và delete thì làm thế nào để cấp phát thêm vùng nhớ cho vùng nhớ mà con trỏ đang quản lý.
.

... viết 21:06 ngày 30/09/2018

Trong C++ thì cứ delete xong rồi new vùng nhớ với kích thước khác.

BX136 viết 21:04 ngày 30/09/2018

vậy dữ liệu ở vùng nhớ cũ sẽ bị mất đi, em muốn giữ lại toàn bộ giữ liệu của vùng nhớ cũ chỉ cần cấp thêm cho vùng nhớ thôi

BX136 viết 21:11 ngày 30/09/2018

có 1 cách đó là dùng vector nếu ko có cách nào khác thì chỉ còn cách dùng vector để tạo vùng nhớ cấp phát động cho việc lưu trữ

... viết 21:11 ngày 30/09/2018

realloc trong C hay delete xong new trong C++ đều không giữ lại vùng nhớ cũ.
Muốn giữ lại dữ liệu cũ thì:

  • Cấp phát vùng nhớ mới cho con trỏ khác.
  • Chuyển dữ liệu từ vùng nhớ cũ sang.
  • delete vùng nhớ cũ.
  • Cho con trỏ cũ trỏ vào con trỏ mới.
BX136 viết 21:05 ngày 30/09/2018

vậy là chỉ còn cách đó thôi vậy chuyển sang dùng vector để xử lý cho tiện vậy vì nhiều lúc không biết lấy bao nhiêu cho nó vừa nữa .
thanks anh đã ns cho e biết điều này

Minh Hoàng viết 21:01 ngày 30/09/2018

cơ chế của vector nó cũng giống như cấp phát bộ nhớ bình thường, tùy theo bạn muốn tối ưu vùng nhớ hay sự thuận tiện khi code mà chọn cách cấp phát hoặc dùng vector

Bài liên quan
0