30/09/2018, 17:02
Sự khác nhau giữa malloc và new
Hôm trước đi phỏng vấn ở VNG, bị hỏi câu này, trả lời không được. Uất ức quá về nhà phải search lại.
Chia sẻ cho anh em nào chưa biết
Bài liên quan
Hôm trước đi phỏng vấn ở VNG, bị hỏi câu này, trả lời không được. Uất ức quá về nhà phải search lại.
Chia sẻ cho anh em nào chưa biết
Ideone.com
Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.
Nếu nói việc thay đổi kích thước vùng nhớ của toán tử new bằng 1 dòng duy nhất thì toán tử new đúng là không làm được thật.
ae nào có thể phân biệt cho mình biết giữa cấp phát động và cấp phát tĩnh được không vậy. Mình mới học tới vấn đề cấp phát động mà không hiểu cho lắm. Có search trên gg mà đọc vẫn không hiểu :((
Cấp phát tĩnh:
Ví dụ:
nếu bạn truyền giá trị của một biến ví dụ như:
thì sẽ báo lỗi vì
size
là biến nên giá trị nó có thể bị thay đổi khi chạy chương trìnhCấp phát động
free
(nếu cấp phátcalloc
,malloc
) hoặcdelete
( nếu dùngnew
để cấp phát)Ví dụ:
Mình đã hiểu được rồi. Tks bác nhìu
Nếu cấp phát vùng nhớ cho con trỏ dạng struct:
PhanSo *p=new PhanSo;
Trong C++ chỉ phân biệt POD và non-POD, còn
struct
vàclass
là mộtem đang thắc mắc là có cách nào để thay thế new bằng malloc trong trường hợp trên không đó ạ
new và malloc bản chất tương tự nhau. Tuy nhiên nên dùng new vì đỡ viết thêm * sizeof(dataType), với có thể override new với error logging: https://stackoverflow.com/questions/1395202/overriding-new-and-logging-data-about-the-caller
Nhớ rằng malloc đi chung với free còn new thì phải đi chung với delete!
vd:
new: int* arr = new int[4];
malloc : int* arr = (int*)malloc(4 * sizeof(int));
Khi xác định viết C++ thì không cần thiết phải đặt ra lựa chọn đó nữa, malloc chỉ là đặt slot mà thôi.
mình thấy new cũng có thể thay đổi bằng malloc đấy chứ.
.
Preformatted text
@Duong_Copeo bạn đi phỏng vấn kiểu này người ta cho bạn rớt, vì ko có ai mix giữa new và malloc cả! 1 cái là operator 1 cái là function thì làm sao mà mix!
Đúng vậy, có thể nói rằng nếu cho
malloc
vànew[]
(cũng nhưnew
) như nhau thì đang thể hiện rằng là chưa “sạch nước cản”.:)) cảm ơn 2 bạn nha đúng là chưa “sạch nước cản” thật, mình hiểu trộn thì vẫn chạy nhưng nếu làm thế là sai quy tắc phải không?
Sai hoàn toàn, vì
new[]
vànew
tạo slot và kích hoạt một constructor với tham số được đưa vào tại chỗ; còn vớimalloc
chỉ mở mem mà thôi, trên đó toàn là cỏ dại (vâng).