sự khác biệt giữa điều này là gì:C++: định nghĩa mảng địa phương so với một cuộc gọi malloc
somefunction() {
...
char *output;
output = (char *) malloc((len * 2) + 1);
...
}
và điều này:
somefunction() {
...
char output[(len * 2) + 1];
...
}
Khi là một trong hơn thích hợp hơn người kia?
cảm ơn tất cả các câu trả lời của bạn. dưới đây là tóm tắt:
- ví dụ: 1 là phân bổ heap
- ví dụ: 2 là đống phân bổ
- có một giới hạn kích thước trên stack, sử dụng nó để phân bổ nhỏ
- bạn phải phân bổ đống miễn phí, hoặc nó sẽ bị rò rỉ
- việc phân bổ chồng là không thể truy cập một khi chức năng thoát
- việc phân bổ đống có thể truy cập cho đến khi bạn giải phóng nó (hoặc ứng dụng kết thúc)
- VLA của không nằm trong tiêu chuẩn C++
sửa chào đón.
đây là một số giải thích về sự khác biệt giữa đống vs stack:
What and where are the stack and heap?
Bạn nên tham khảo sách C++ của mình. Nếu bạn không có một cuốn sách C++, tôi khuyên bạn nên nhận được một trong những văn bản mới bắt đầu được liệt kê trong [Danh sách và Danh sách Sách Hoàn chỉnh C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book -guide-and-list). –
Ngoài ra, câu hỏi phụ thuộc hoàn toàn vào cách 'len' được định nghĩa; nếu nó không phải là một hằng số, thì ví dụ mã thứ hai là C++ hình thành không đúng. –
len là một int và được gán cho kết quả của strlen bên trong hàm. – Gush