2010-06-12 36 views
5

Tôi sẽ gọi hàm Vala từ C và tôi có câu hỏi về quản lý bộ nhớ. Chức năng trông như thế này trong Vala:Quản lý bộ nhớ Vala

int[] GetNumbers(); 

và được dịch bởi valac C như thế này

gint* GetNumbers(int* result_length1); 

Khi chức năng trên được gọi từ C, là người gọi trách nhiệm giải phóng mảng gint* ?

Trả lời

6

Câu hỏi về Vala! Làm thế nào mát mẻ!

Vala có tùy chọn -C hữu ích cho phép bạn xem nhanh mã C nó tạo. Chức năng này, ví dụ ...

int[] GetNumbers() { 
    return new int[] {1,2,3}; 
} 

... khi biên dịch với ...

valac -C -c test.vala 

... sẽ tiết lộ C-code sau (trong test.c) ...

gint* GetNumbers (int* result_length1) { 
    gint* result = NULL; 
    gint* _tmp0_ = NULL; 
    gint* _tmp1_; 
    result = (_tmp1_ = (_tmp0_ = g_new0 (gint, 3), _tmp0_[0] = 1, _tmp0_[1] = 2, _tmp0_[2] = 3, _tmp0_), *result_length1 = 3, _tmp1_); 
    return result; 
} 

Lưu ý g_new0; vì vậy có, bạn muốn g_free nó.

Ngay cả khi bạn chỉ thực hiện theo tệp tiêu đề và không thể bận tâm xem xét mọi triển khai, có vẻ như các quy tắc tương tự áp dụng như trong C: nếu nó không phải là const, hãy giải phóng nó.

Các vấn đề liên quan