Zweidimensionales dynamisches Array übergeben
-
Hallo!
Ich hab mir ein 2-dimensionales dynamisches Array gebastelt und möchte es an eine andere Funktion per Referenz übergeben. Das hab ich so gemacht:
void setHotspot(float **matrix); void main(void) { float **matrix; // Speicher wird hier allokiert usw. setHotspot(&matrix); }
Allerdings bekomm ich in der Funktion setHotspot() immer einen Zugiffsfehler.
Was mach ich falsch und wie geht es besser?MfG
Sebastian
-
matrix ist bereits ein float Zeiger auf einen Zeiger. Durch den Adressoperator bekommst du dann den Typ float***
Schreib also statt:
setHotspot(&matrix);
das:
setHotspot(matrix);
-
Super! Vielen Dank, das funktioniert!
Danke für die schnelle Antwort!Aber komisch, dass es zuvor beim kompilieren nur eine Warnung gab!
MfG
-
es heißt int main
-
Wieso kann man beim Programm von Sebastian den Zeiger einfach so übergeben, und in meinem Fall nicht:
Besprochen wurde es bereits hier: HIER KLICKENAber es ergibt für mich keinen Sinn dass ich nicht das gleiche tun kann! Schließlich ist ein Array ja auch nicht mehr als ein Pointer!?
In Sebastians Programm genügt es zu schrieben funktionsaufruf(zeiger), während ich funktionsaufruf(array[7][7]) schreiben muss!
In beiden Fällen handelt es sich um ein 2d Array, also im Prinzip das Gleiche.
Vielleicht kann da mal jmd. "Licht ins Dunkle" bringen!?Viele Grüße,
Harri
-
harry3
******liest du eigentlich mit? Hast du die Beiträge zu deinem Post vollständig erfasst?
Wenn ja dann wüsstest du das Arrays KEINE Zeiger sind. Und du wüsstest auch das es einen Unterschied macht ein statisches "2dim Array" oder ein komplett dynamisch angelegtes "2dim Array" zu haben.
bye
tt
-
Und ist das jetzt gleich ein Grund so auszuflippen?
Tschuldigung das ich manches nicht verstehe, ich dachte für sowas ist ein Forum da.
Ich wusste halt nicht dass es wirklich einen solch gravierenden Unterschied zw. statischen/dynamischen Arrays gibt.Also, um nochmal sachlich zu werden:
Wenn ich ein stat. Array[7][7] übergeben möchte, dann ist das
1.) nur ein einfacher int* Pointer
2.) muss ich schreiben übergabe(array[7][7])Wenn ich ein dyn. Array[7][7] habe, dann ist das
1.)ein Zeiger vom Typ int**
2.)Bei der Übergabe muss ich nur die Startadresse übergeben, kann also übergabe(array) schreiben.Ein bisschen "cooler" könntest du aber schon reagieren, wenn du sagen willst, das dir was nicht passt. Ist ja wohl nicht so schwer.
Grüße,
Harri
-
Hi,
zweidimensinale Arrays als Parameter haben auch mich schon schockiert.
Wenn du als Parameter im Protoyp beispielsweise int a[][], kannst du da nicht einfach einen Doppelpointer übergeben, auch umgekehrt kannst du kein 2-Dim Array übergeben, wenn du als Parameter int **a angibtst, dann bringt der Compiler einen Fehler.
Eine Möglichkeit ist eben, wie bereits hier gesagt wurde, einfache Pointer zu verwenden, denn ein Pointer auf ein Array macht keinen Sinn, ein Array ist "quasi" bereits ein konstanter Pointer.