Woodz
Lieutenant
- Registriert
- Apr. 2009
- Beiträge
- 696
Hallo.
Ich habe folgendes Problem. Ich habe ein struct erzeugt und in diesem habe ich einen Doppelzeiger von Typ double.
Nun möchte ich diesem Doppelzeiger Speicher durch eine Funktion zuweisen, aber das funktioniert nicht. Da der Rückgabewert der Funktion ein Fehlercode sein soll, dachte ich mir, dass die Zuweisung auch ohne Rückgabewert funktionieren sollte. Ich übergebe der Funktion ja einen Doppelzeiger.
Naja. Hier der grobe Code:
Ausgabe:
(nil)
0x5588dacaa6b0
(nil)
Wie ihr seht, besitzt der Doppelzeiger vor der Zuwesiung den Wert (nil). Nach der Zuweisung in der Funktion eine physische Adresse
und außerhalb der Funktion wieder (nil).
Wie ist das Möglich? Ich arbeite doch mit Zeigern und diese funktionieren doch immer mit "call by reference".
Beste Grüße
Ich habe folgendes Problem. Ich habe ein struct erzeugt und in diesem habe ich einen Doppelzeiger von Typ double.
Nun möchte ich diesem Doppelzeiger Speicher durch eine Funktion zuweisen, aber das funktioniert nicht. Da der Rückgabewert der Funktion ein Fehlercode sein soll, dachte ich mir, dass die Zuweisung auch ohne Rückgabewert funktionieren sollte. Ich übergebe der Funktion ja einen Doppelzeiger.
Naja. Hier der grobe Code:
C:
#include <stdio.h>
#include <stdlib.h>
struct dataset{
double **data;
};
int allocate_memory(double **matrix, int rows, int cols);
int main(){
struct dataset dd;
printf("%p\n",dd.data); // Ausgabe des Doppelzeigers vor der Zuweisung
allocate_memory(dd.data, 5, 3);
printf("%p\n",dd.data); // Ausgabe des Doppelzeigers nach der Zuweisung
return 0;
}
int allocate_memory(double **matrix, int rows, int cols){
int idx, jdx;
matrix = (double**) calloc(rows, sizeof(double*));
if (matrix == NULL){
printf("Speicherfehler\n");
}
else{
for (idx=0; idx<rows; idx++){
matrix[idx] = (double*) calloc(cols, sizeof(double));
if (matrix[idx] == NULL){
printf("Speicherfehler\n");
}
}
}
printf("%p\n", matrix); /* Ausgabe der Adresse des Doppelzeigers
während der Zuweisung in der Funktion */
}
Ausgabe:
(nil)
0x5588dacaa6b0
(nil)
Wie ihr seht, besitzt der Doppelzeiger vor der Zuwesiung den Wert (nil). Nach der Zuweisung in der Funktion eine physische Adresse
und außerhalb der Funktion wieder (nil).
Wie ist das Möglich? Ich arbeite doch mit Zeigern und diese funktionieren doch immer mit "call by reference".
Beste Grüße