Tôi viết một mô-đun trong C# để xuất một số chức năng được sử dụng trong C. Tôi cần cấp phát một số bộ nhớ cho một số cấu trúc được truyền giữa C < -> C#.Bất kỳ sự khác biệt nào giữa malloc và Marshal.AllocHGlobal?
Những gì tôi phân bổ trong C Tôi làm với malloc, và trong C# tôi làm với Marshal.AllocHGlobal() (để cấp phát bộ nhớ không được quản lý được chuyển cho C).
Có vấn đề gì nếu tôi giải phóng() bộ nhớ được cấp phát bằng Marshal.AllocHGlobal và nếu tôi giải phóng bộ nhớ bằng Marshal.FreeHGlobal() được cấp phát bằng malloc?
Cảm ơn
Cảm ơn mọi câu trả lời – bzamfir
Cảm ơn. Trên thực tế những gì tôi đã làm là tạo ra trong các chức năng xuất khẩu lib của tôi AllocateMem, và FreeMem, mà tôi đề nghị được sử dụng bằng cách gọi chương trình, khi tạo cấu trúc được chuyển đến lib. Nhưng tôi đã tự hỏi của một người không tuân thủ quy tắc này và chuyển đến lib của tôi một số cấu trúc phân bổ với malloc (hoặc bất cứ điều gì khác), những gì sẽ xảy ra? – bzamfir
Vấn đề là các cấu trúc có một số con trỏ đến char (cho chuỗi) mà tôi phải phân bổ và chuyển đến mã gọi. Và nếu mã gọi điện thoại cố gắng giải phóng bộ nhớ đó bằng miễn phí() thì sao? Đó là lý do tại sao tôi tạo FreeMem, mà tôi đã thực hiện với FreeHGlobal, được sử dụng để giải phóng bộ nhớ khi gọi prog. Nếu không thì đó là trách nhiệm của lập trình viên gọi mã. – bzamfir