Einen Unterschied zwischen malloc und Marschall.AllocHGlobal?

Schreibe ich ein Modul in C#, dass die Exporte einiger Funktionen verwendet werden, die in C.
Ich brauche zum reservieren von Speicher für einige Strukturen übergeben werden, zwischen C <-> C#.

Was ich zuordnen im C, die ich mit malloc und in C# mache ich mit dem Marschall.AllocHGlobal() (reservieren nicht verwalteten Speicher zu übergeben C).

Gibt es irgendwelche Probleme, wenn ich free() den Speicher mit dem Marschall.AllocHGlobal, und wenn ich Speicher freigeben mit dem Marschall.FreeHGlobal (), die verteilt wurde mit malloc?

Dank

  • Vielen Dank für alle Antworten
  • Danke. Eigentlich das, was ich Tat, war zu erstellen, die in meiner lib exportierten Funktionen AllocateMem, und FreeMem, die ich empfohlen, verwendet werden, durch aufrufen von Programmen, beim erstellen von Strukturen, die übergeben werden, zu lib. Aber ich Frage mich, ist die nicht Einhaltung dieser Regel, und pass auf meine lib einige Strukturen zugewiesen mit malloc (oder irgendetwas anderes), was soll passieren?
  • Die Frage ist, die Strukturen haben einige Zeiger auf char (für strings), die ich habe zu reservieren und übergeben den aufrufenden code. Und was ist, wenn der aufrufende code versuchen zu befreien, dass der Speicher mit free()? Das ist, warum ich erstellt, FreeMem, die ich umgesetzt habe, mit FreeHGlobal, verwendet werden, um Speicher freizugeben, in Berufung prog. Ansonsten ist es in der Verantwortung des Programmierers der aufrufende code.
InformationsquelleAutor bzamfir | 2012-01-26
Schreibe einen Kommentar