Giả sử tôi viết mã của mình rất phòng thủ và luôn kiểm tra kiểu trả về từ tất cả các chức năng mà tôi gọi.Làm thế nào để tránh chuỗi dài miễn phí (hoặc xóa) sau mỗi lần kiểm tra lỗi trong C?
Vì vậy, tôi đi như:
char* function() {
char* mem = get_memory(100); // first allocation
if (!mem) return NULL;
struct binder* b = get_binder('regular binder'); // second allocation
if (!b) {
free(mem);
return NULL;
}
struct file* f = mk_file(); // third allocation
if (!f) {
free(mem);
free_binder(b);
return NULL;
}
// ...
}
Thông báo một cách nhanh chóng như thế nào free()
mọi thứ trở nên ngoài tầm kiểm soát. Nếu một số chức năng không thành công, tôi phải giải phóng mọi phân bổ trước đây. Mã nhanh chóng trở nên xấu xí và tất cả những gì tôi làm là sao chép tất cả mọi thứ. Tôi trở thành một lập trình sao chép/dán, thậm chí tệ hơn, nếu ai đó thêm một tuyên bố ở đâu đó ở giữa, anh ta phải sửa đổi tất cả mã bên dưới để gọi số free()
để bổ sung.
Trình lập trình C có kinh nghiệm về vấn đề này như thế nào? Tôi không thể tìm ra bất cứ thứ gì.
Cảm ơn, Boda Cydo.
+1 - trong khi không nổi tiếng ở trường, đây là thực tế nhất và được thực hiện tất cả các thời gian. đặt tất cả các câu lệnh miễn phí của bạn vào một nhãn ngay trước khi rời khỏi hàm, kiểm tra biến trạng thái trước tiên nếu cần và sử dụng GOTO. –
Tính năng này hoạt động như thế nào? Tôi chưa bao giờ nghe về kỹ thuật này. Bạn có thể minh họa nó không? – bodacydo
Có bạn đi, nó sẽ là một cái gì đó như thế. – karlphillip