Vektorproblem
-
Dann kommst du nicht drumherum über malloc() entsprechend Speicher zu reservieren. Sind zwei Zeilen extra.
-
Ja das Problem ist, dass die Funktion double * differenz(double *x, double *y, unsigned int n) vorgegeben ist und auch so ausgeführt werden muss.
Bäh! Wer gibt denn so etwas vor? Das verstößt doch gegen alle Grundregeln guten Designs. Meine Prognose: Schlechter Lehrer.
-
SeppJ schrieb:
Bäh! Wer gibt denn so etwas vor? Das verstößt doch gegen alle Grundregeln guten Designs. Meine Prognose: Schlechter Lehrer.
Kein Kommentar
Naja ich versuche es dann mal mit malloc() hinzubekommen. Danke Tim.
-
Ich habe schamlos gelogen. Es ist nochmal mindestens eine Zeile um dann in main() (zumindest in deinem Fall main) mittels free() den Speicher wieder freizugeben.
-
Zu meiner Verteidigung muss ich erwähnen, dass ich
malloc()
zum ersten Mal verwende#include <stdio.h> #include <stdlib.h> #include <math.h> double * differenz(double *x, double *y, unsigned int n){ int i; double *c = (double*)malloc(n*sizeof(double)); if (c != NULL) { for (i=0; i<n; i++) { c[i]=y[i]-x[i]; } } return c; } int main () { int n=4,i; double a[4]={2,3,4,5}; double b[4]={1,4,6,7}; /*Differenzvektor aufrufen*/ free(c); /*Hier wieder freigeben?*/ return 0;
Ist die Funktion jetzt in dieser Form korrekt? Und die Freigabe des Speichers in main() auch?
Ich habe immer noch Probleme auf den Differenzvektor zu zugreifen. Wäre dankbar für den letzten Schliff
-
Dir fehlt noch ein c in main.
Ein Zeiger auf double muss es sein.c wird von der Funktion differenz zurück gegeben.
So wie du auf a und b zugreifst (bzw. x und y) kannst du auch auf c zugreifen.
-
Für's "erste Mal" sieht das gut aus
Modrob.90 schrieb:
double *c = (double*)malloc(n*sizeof(double));
Da würde ich aber noch zwei Sachen ändern:
a) cast weg
b) sizeof nicht direkt auf Typen anwendendouble *c = malloc(sizeof *c * n);
-
Um es kurz zu machen:
int main () { int n=4, i; double a[4]={2,3,4,5}; double b[4]={1,4,6,7}; double *c; /*Differenzvektor aufrufen*/ c = differenz(a, b, n); if(c == NULL) return -1; /* Ergebnis */ for (i=0; i<n; i++) { printf("%lf ", c[i]); } free(c); /*Hier wieder freigeben?*/ return 0; }
In der Funktion differenz() kommt noch die Warnung:
'<': Konflikt zwischen 'signed' und 'unsigned'
was nicht sein müsste.
@Tim: sizeof kommt ohne Klammern nicht klar.
-
Tim schrieb:
Dann kommst du nicht drumherum über malloc() entsprechend Speicher zu reservieren. Sind zwei Zeilen extra.
Mit allen Fehlerabfragen und am besten noch Fehlermeldungen und free deutlich mehr
-
merano schrieb:
@Tim: sizeof kommt ohne Klammern nicht klar.
Deswegen schreibe ich es immer (wo es geht) ohne Klammern, da lernen die Leute noch was.