Tôi đã tạo một hàm được thiết kế để nhận dữ liệu nhập của người dùng. Nó yêu cầu bộ nhớ được cấp phát cho biến giữ đầu vào của người dùng; tuy nhiên, biến đó được trả về ở cuối hàm. Phương pháp thích hợp để giải phóng bộ nhớ được phân bổ/trả về giá trị của biến là gì?Cách thích hợp để bộ nhớ miễn phí của biến số được trả lại
Đây là mã:
char *input = malloc(MAX_SIZE*sizeof(char*));
int i = 0;
char c;
while((c = getchar()) != '\n' && c != EOF) {
input[i++] = c;
}
return input;
Tôi có nên trả về địa chỉ của đầu vào và miễn phí nó sau khi nó được sử dụng?
Tò mò là phương pháp thích hợp nhất để giải phóng biến đầu vào.
Nếu bạn 'malloc', cuối cùng ai đó sẽ cần phải 'tự do', có thể là bạn trong một api khác hoặc người gọi. Liên quan, nếu được hỗ trợ trên (các) nền tảng đích của bạn, ['getline'] (http://pubs.opengroup.org/stage7tc1/functions/getdelim.html), một hàm thư viện được thêm vào POSIX.1-2008, có vẻ như để * gần * làm những gì bạn đang cố gắng triển khai. Nó vẫn yêu cầu người gọi để cuối cùng 'miễn phí' bất kỳ phân bổ trả lại, nhưng cũng cung cấp ngữ nghĩa tái sử dụng, nơi mã của bạn không * không *. Tùy thuộc vào mục đích sử dụng và nền tảng đích, nó có thể đáng xem xét. – WhozCraig