Forum: Mikrocontroller und Digitale Elektronik Fehler beim generieren eines Arrays


von Lisa (Gast)


Lesenswert?

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?

von Programmierer (Gast)


Lesenswert?

Lisa schrieb:
> Aber was mache ich falsch?

Du zeigst uns nicht die Fehlermeldung.

von Peter II (Gast)


Lesenswert?

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.

von Lisa (Gast)


Lesenswert?

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]);

von Dr. Sommer (Gast)


Lesenswert?

Das wird ja immer Schlimmer. Du solltest dringend ein C-Buch lesen...

von Peter II (Gast)


Lesenswert?

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.

von Mark B. (markbrandis)


Lesenswert?

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.

von Hanswurst (Gast)


Lesenswert?

> 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?

von Lisa (Gast)


Lesenswert?

Okay vielen Dank für eure Antworten :D :D :D
Entschuldigt bitte mein Anfänger-Unwissen :/

von Dirk B. (dirkb2)


Lesenswert?

Und du brauchst Platz für double und nicht für einen Zeiger darauf 
(double*)

Das * im sizeof hinter dem double ist zuviel.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.