Câu hỏi đơn giản về hàm realloc trong C: Nếu tôi sử dụng realloc để thu nhỏ khối bộ nhớ mà con trỏ trỏ đến, bộ nhớ "thêm" có được giải phóng không? Hay nó cần phải được giải phóng bằng tay bằng cách nào đó?Sử dụng realloc để thu hẹp bộ nhớ phân bổ
Ví dụ, nếu tôi làm
int *myPointer = malloc(100*sizeof(int));
myPointer = realloc(myPointer,50*sizeof(int));
free(myPointer);
Tôi có một rò rỉ bộ nhớ?
Nói đúng là có rò rỉ bộ nhớ, vì bạn không ghi lại kết quả của 'realloc' và do đó bạn không thể giải phóng nó. Nhưng như câu trả lời của R .. cho thấy, bạn có thể đã may mắn về một chi tiết thực hiện. –
Rất tiếc, bạn đã đúng. Tôi đã cố sửa nó. Làm thế nào về bây giờ? –
Mã mới vẫn rò rỉ phân bổ ban đầu nếu 'realloc' không thành công. Tôi hy vọng hầu hết các triển khai sẽ không bao giờ thất bại trong việc thu nhỏ một khối, nhưng nó được cho phép. Cách chính xác để gọi realloc, cho dù đang phát triển hay thu hẹp khối, là 'void * tmp = realloc (myPointer, 50 * sizeof (int)); if (! tmp) {/ * xử lý lỗi bằng cách nào đó. myPointer vẫn trỏ đến khối cũ, vẫn được cấp phát * /} myPointer = tmp; '. –