Ich muss mehrere Arrays desselben Typs und derselben Form zuordnen. Am Anfang habe ich so etwas wie gemacht:
%Vor% Um zu vermeiden, dass malloc
und free
mehrere Male aufgerufen werden, habe ich das obige in
Das scheint in Ordnung zu sein (in dem Sinne, dass sich die Funktionen im realen Fall genauso verhalten), aber ich frage mich, ob das immer noch C-Code ist (undefiniertes Verhalten?), und ob ich diese Methode erweitern kann zu komplexen Daten (Arrays von Strukturen, etc.).
Es ist in C absolut gültig. Aber vergessen Sie nicht, nur den a
Zeiger freizugeben. Ihre Methode ähnelt struct hack
Ich denke jedoch, ein logisches Problem in diesem Code ist, dass, wenn Sie außerhalb der Grenzen für a1
oder a2
gehen, Sie es nicht bemerken werden, da Sie auf gültige Speicheradressen zugreifen werden, dh Sie werden nicht erhalten Seg Fehler.
Im ersten Fall können Sie jedoch "SegFault" erhalten und Ihren Fehler bemerken.
Beide sind gültig, da Sie malloc
verwenden, um zusammenhängenden Speicher zuzuweisen. Tatsächlich wird Code, der in der Form dem zweiten Fall ähnlich ist, häufig verwendet, wenn Matrizen in C modelliert werden.
Es ist erwähnenswert, dass
%Vor%ist undefiniertes Verhalten, da Sie nicht erwarten können, dass die Stapelzuordnung zusammenhängend ist.