thể trùng lặp:
delete[] supplied a modified new-ed pointer. Undefined Behaviour?xóa [] Mảng ký tự
Hãy nói rằng tôi đã được phân bổ một số ít các nhân vật sử dụng new char[number]
.
Chỉ có thể xóa một vài ký tự kết thúc (giống như delete[] (charArray + 4);
, được cho là sẽ phân bổ tất cả các ký tự ngoại trừ bốn ký tự đầu tiên)?
Tôi đọc mà new[]
cửa hàng số một số hiện thực của các đối tượng được phân bổ trước khi các mảng của các đối tượng để delete[]
biết có bao nhiêu đối tượng để de-phân bổ, vì vậy nó có thể không an toàn để làm những gì tôi đang hỏi ...
Cảm ơn.
EDIT:
là tự xóa các byte cuối không mong muốn sử dụng riêng biệt delete
báo cáo một cách an toàn để làm những gì tôi đang yêu cầu?
Bạn có thể giải thích thêm một chút về cách 'std :: vector' không? – slartibartfast
@myrkos Nó phân bổ không gian để lưu trữ các phần tử * n *, nhưng nó có thể báo cáo kích thước của nó là * <= n *. Điều này là để làm cho thay đổi kích thước hiệu quả hơn. – Maxpm
@myrkos: Nó phân bổ không gian "nguyên" với ':: toán tử mới' và sau đó sử dụng vị trí 'mới' để biến không gian thô đó thành các đối tượng. Khi cần phá hủy các đối tượng (ví dụ, khi 'vectơ' nằm ngoài phạm vi hoặc các phần tử' xoá'), nó sẽ gọi trực tiếp dtor để làm như vậy. –