Heap zuteilen ein 2D-Array (nicht Array von Zeigern)
Ich bin das schreiben von C-code und ich möchte heap reservieren 512*256 bytes. Für meine eigene Bequemlichkeit würde ich gerne in der Lage sein, um Zugriff auf die Elemente mit der syntax array[a][b]; keine arithmetische finden Sie den richtigen index.
Jedem tutorial sehe ich online sagt mir, ich erstelle einen array von Zeigern, die auf arrays von Zeilen möchte ich in mein array. Dies bedeutet, dass jedes subarray werden muss malloc würde und frei würde individuell. Ich bin an einer Lösung interessiert, erfordert nur einen Aufruf von malloc und einem Aufruf von free.(Also alle Elemente zusammenhängend sind) ich denke, dies ist möglich, da ich nicht konstruieren ein jagged array.
Ich würde mich freuen, wenn jemand erzählen könnte die syntax für die Deklaration so ein array.
InformationsquelleAutor der Frage Paul | 2012-04-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, wenn Sie wollen zuweisen, array-Typ, weisen Sie es in einen Zeiger von diesem Typ.
Da 2D-arrays sind arrays von arrays (in deinem Fall ein array von arrays 512 256 Zeichen) zuordnen, sollten Sie in einen Zeiger auf array mit 256 chars:
(Die Klammern um
*arr
sind, um einen Zeiger auf array, und nicht ein array von Zeigern)InformationsquelleAutor der Antwort asaelr
Verrechnen Sie das array wie folgt, es erfordert zwei Aufrufe
free
ist, sondern es ermöglichtarray[a][b]
Stil, syntax und zusammenhängend ist.Sehen
array2
hier für weitere Informationen: http://c-faq.com/aryptr/dynmuldimary.htmlInformationsquelleAutor der Antwort Matt Eckert
Dies ist einfach, vorausgesetzt, Sie brauchen keine Kompatibilität mit der alten C89-standard (unter den aktuellen C-Compiler, nur MSVC und ein paar embedded-target-Compiler sind, die rückwärts). Hier ist, wie Sie es tun:
Dann
array[a][b]
gilt für allea
im[0,rows)
undb
im[0,cols)
.In der Sprache der C-standard
array
hat variabel modifizierten Typ. Wenn Sie möchten, übergeben Sie den Zeiger an andere Funktionen übergeben werden, müssen Sie wiederholen Sie diesen Typ in der Funktion argument-Liste und stellen Sie sicher, dass mindestens die Anzahl der Spalten wird an die Funktion übergeben (da es benötigt wird, als Teil der variabel modifizierten Typ).Edit: ich verpasste die Tatsache, dass OP kümmert sich nur um eine Feste Größe, 512x256. In diesem Fall C89 genügt, und alles, was Sie brauchen, ist:
Die exakt gleiche Art verwendet werden können, in Funktion und argument-Listen, wenn Sie müssen übergeben Sie den Zeiger, um zwischen den Funktionen (und auch als Funktions-Rückgabe-Typ, aber für diesen Einsatz möchten Sie vielleicht typedef... 🙂
InformationsquelleAutor der Antwort R..
Da Sie wissen, die Größe des Arrays vor der Zeit, könnten Sie eine
struct
Typ enthält eine 521x256 array, und dann die dynamische Zuordnung desstruct
.InformationsquelleAutor der Antwort trutheality
Wenn Sie wissen, die Größe des Arrays, Sie können
typedef
es, und machen Sie einen Zeiger darauf. Hier ist ein kurzer Codeausschnitt, der zeigt diese Verwendung:InformationsquelleAutor der Antwort dasblinkenlight
Es ist dynamisch zuweisen der gleichen Art mehrdimensionales array, dass
gibt Sie, aber es ist ein winziges schwierig, weil der Typ Zerfall. Ich weiß nur, wie es zu tun mit einem
typedef
:Diese nur können Sie bestimmen die Größe der zweiten dimension zur Laufzeit. Wenn beide Dimensionen variieren können, die Sie zur Laufzeit benötigen einen dope-Vektor.
InformationsquelleAutor der Antwort zwol