cuốn sách gpt4 ai đã làm

Làm cách nào để giải phóng bộ nhớ động (nếu cần) khi sắp xếp một CString từ C++ sang C#?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 07:00:41 28 4
mua khóa gpt4 Nike

Tôi có một CString cs ở phía C++ và một ip IntPtr ở phía C# chứa giá trị của cs thông qua cơ chế xử lý mã hóa (soái ca).

Sau đó, tôi chỉ nhận được chuỗi yêu cầu là Marshal.PtrToStringAnsi(ip) và mọi thứ đều hoạt động tốt, nhưng tôi muốn biết liệu tôi có nên xóa bộ nhớ không được quản lý do ip chiếm giữ hay không, tức là cs?

câu trả lời hay nhất

Bạn không thể, bạn không biết mã cấp phát không được quản lý sử dụng để tạo phiên bản CString. Ngoài ra, bạn phải gọi hàm hủy của CString, bạn không thể lấy được địa chỉ của nó.

Nếu đối tượng CString này được trả về dưới dạng giá trị trả về của hàm từ hàm C++ mà bạn gọi từ C#, thì bạn đã sai lầm. Nó không rõ ràng từ câu hỏi của bạn. Bạn sẽ bị rò rỉ bộ nhớ không thể kiểm soát được. Sẽ cần có một trình bao bọc được viết bằng C++/CLI để giải quyết vấn đề này. Các chuỗi được trả về dưới dạng giá trị trả về của hàm phải được phân bổ bởi CoTaskMemAlloc() để được bộ mã hóa P/Invoke dọn dẹp đúng cách. Không có mã C++ nào có thể làm được điều này.

Làm cách nào để giải phóng bộ nhớ động (nếu cần) khi sắp xếp một CString từ C++ sang C#? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/2730663/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress