thể trùng lặp:
C programming : How does free know how much to free?Làm thế nào để miễn phí() biết bao nhiêu bộ nhớ để deallocate?
Khi lập trình trong C, tôi thường sử dụng malloc()
để cấp phát bộ nhớ và free()
để phát hành nó:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
/** Do stuff **/
free(objArr);
như thế nào free()
biết bao nhiêu bộ nhớ để deallocate? malloc()
có tạo một bảng ở đâu đó để ghi nhớ con trỏ và mỗi con trỏ trỏ đến bao nhiêu bộ nhớ không?
Nếu đúng như vậy, free()
sẽ thất bại nếu tôi đổi tên con trỏ? ví dụ:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
MyObject* newPtr= objArr;
free(newPtr); /** Does this fail? **/
Điều gì sẽ xảy ra nếu tôi tăng con trỏ và sau đó chạy free()
? ví dụ:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
newPtr++;
free(newPtr); /** What happens now? **/
Nó sẽ giải quyết một đoạn bộ nhớ bổ sung ngay từ cuối mảng gốc?
Bản sao của http://stackoverflow.com/questions/1518711/c-programming-how-does-free-know-how-much-to-free – codaddict