Hi, ich hoffe das ihr mir hier helfen könnt! Weis jemand welchen Fehler ich hier mache? Ich möchte 3 n-dimensionale double Felder generieren x[n], y[n], z[n] x=y=z=(double*)malloc(n*sizeof(double*)); Aber was mache ich falsch?
Lisa schrieb: > Aber was mache ich falsch? dann wirst du wohl auch 3 mal malloc aufrufen müssen, sonst bekommst du keine 3 verschieden Arrays.
Geht das nicht in einem Befehl, da x,y & z alle gleich groß sein sollen?
wie zb x=y=z=scanf("%ld%lf%lf",&x[n],&y[n],&z[n]);
Das wird ja immer Schlimmer. Du solltest dringend ein C-Buch lesen...
Lisa schrieb: > Geht das nicht in einem Befehl, da x,y & z alle gleich groß sein sollen? nein. Was soll das musst du für jeden Quellcodezeile Geld bezahlen? schreibe 3 Zeilen dann könnte es sogar lesbar und wartbar werden.
Lisa schrieb: > Geht das nicht in einem Befehl, da x,y & z alle gleich groß sein sollen? > wie zb x=y=z=scanf("%ld%lf%lf",&x[n],&y[n],&z[n]); Zu Funktionen wie malloc() gibt es jede Menge Dokumentation. Die kann man ruhig auch mal lesen - das tut nicht weh. :-) Zum Beispiel: http://www.cplusplus.com/reference/cstdlib/malloc/ Wie man sieht, bekommt man bei einem Aufruf von malloc einen Zeiger auf den allokierten Speicherbereich zurück. Wenn man also drei Speicherblöcke will, muss man eben dreimal Speicher anfordern.
> Weis jemand welchen Fehler ich hier mache? Leider gleich mehrere. 1. Unter Project&Code hat dieser Beitrag, der eine Frage ist nicht zu suchen. Unter Project&Code sollen fertige Projekte präsentiert werden. Hier allerdings nur der Vollständigkeit halber erwähnt. 2. Einen orthographischer Fehler. Hier allerdings nur der Vollständigkeit halber erwähnt. Es heisst: "Weiß". 3. Einen begrifflichen Fehler. Hier allerdings nur der Vollständigkeit halber erwähnt. Es heisst auf Englisch "Array" und die übliche K&R-Übersetzung spricht von "Vektor". 4. > Ich möchte 3 n-dimensionale double Felder generieren x[n], y[n], z[n] Die Aussage ist widersprüchlich. Die Ausdrücke x[n], y[n], z[n] betreffen drei eindimensionale Vektoren x, y und z. Nicht drei n-dimensionale Vektoren. 4. Aus dem Kontext heraus: > x=y=z=(double*)malloc(n*sizeof(double*)); Den von malloc zurückgegebenen Zeiger, kann man nicht mehrfach verwenden um sie als Zeiger auf drei verschiedene Vektoren zu verwenden. Vielmehr erhältst Du so einen Zeiger, der, wenn Du x, y und z damit initialisierst, in allen Fällen auf ein und denselben Vektor zeigen. Nicht auf drei verschiedene. 5. Die Beschreibung des Problems im Detail fehlt. Was geschieht, wenn Du es versuchst?
Okay vielen Dank für eure Antworten :D :D :D Entschuldigt bitte mein Anfänger-Unwissen :/
Und du brauchst Platz für double und nicht für einen Zeiger darauf (double*) Das * im sizeof hinter dem double ist zuviel.
dein x=y=z=(double*)malloc(n*sizeof(double*)); sizeof(double*) im malloc verkneife dir mal. Ein Pointer (Adresse) auf double ist auf einem 32Bit-System 4 Bytes groß, dagegen double selbst 8 Bytes. double *x=(double*)malloc(3*n*sizeof(double)),*y=x+n,*z=x+n+n; wäre möglich.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.