wird nichts zugewiesen
-
Danke,
aber alle Variablen sind belegt mit Werten (Vorinitiallisiert). j ist schon int bei mir.
-
Mal machst Du Deine Schleife von 0...n dann von 1...n-1. Das macht es für einen außenstehenden schwerer Deinen Code zu verstehen und Du stellst Dir selber auch Stolperfallen. Mach es einheitlich bzw. kommentiere, warum Du bei einem bestimmten Wert beginnst. Wenn man einen Wert nicht benötigt, dann belege dafür nicht extra Speicherplatz und lass ihn ganz weg.
rasidrasid schrieb:
...aber alle Variablen sind belegt mit Werten (Vorinitiallisiert).
Eben nicht! Du benutzt z.B. Fs oder Fv ohne es vorher zu initialisieren:
double c1, x0, Fs, Fv, t, deltatime, amp, freq, deltax, c2sum = 0.0; //nur c2sum ist 0.0!dann:
// Berechnung der F2-Kraft im Maxwell-Strang for(int n=0 ; n < j ; n++) { F2[n] = -F[n] + Fs + Fv + c1*x[n]; // Fs, Fv == Zufallszahl! // cout << F2[n] << endl; }
-
Hallo,
wie belegst du denn deine Variablen vor? deltatime&co enthalten nur Zufallswerte und im code, den du angibts werden sie nicht verändert.
Grüße
PS: Es ist immer noch am Morgen^^
-
Bei diesem Verfahren musst du mal mit 0 anfangen (alle Werte müssen doch eingelesen werden) und mal mit 1 (die entstehende Differenz bei 1 kommt aus 0 also n-1 und 2 also n+1). Was wäre dann der Wert wenn du bei 0 beginnen würdest? Das Programm müsste irgendein Wert aus einer Speicherstelle nehmen, wo sicherlich nicht ein Wert für mich drin ist (das nenne ich halt mal handling der Messwerte).
-
Diese ganzen Variablen werden aus einer externen Datei schon belegt. Auch deltax und Fs usw. Mach Dir da keine Gedanken, die sind alle mit richtigen Werten belegt. Alles funktioniert einwandfrei, bis auf diesen cout und auch nur in dieser Schleife. Intern bekommen die B[n] Werte die Werte Bakt[n] zugewiesen, das sehe ich an dem logarithmierten Wert. Die sind alle korrekt....müssten sie ja auch, denn wie du siehst kommen 0 Werte heraus die beim Logarithmus probleme verursachen würden.
-
Na, langsam kommen wir voran.
Wenn du die Variablen von extern bespielen willst, dann darfst du die nicht in deiner main nochmal local deklarieren. Das musst du dann außerhalb machen.
Grüße
-
rasidrasid schrieb:
Diese ganzen Variablen werden aus einer externen Datei schon belegt. Auch deltax und Fs usw. Mach Dir da keine Gedanken, die sind alle mit richtigen Werten belegt. ...
Ich kann nur das beurteilen was Du uns hier zeigst (gleiches Thema wie zu Beginn). Was Du uns hier zeigst ist definitiv falsch. Reines Zufallsverhalten. Dass Dein Programm in Wirklichkeit ganz anders aussieht kann ich ja nicht wissen.
Dann zeige uns doch bitte mal wo und wie Du die Werte einliest...
Ich würde Dir außerdem dazu raten Variablen erst so spät wie möglich zu deklarieren (da wo sie benötigt werden) und dabei auch gleich zu initialisieren. Entweder mit 0 oder am besten gleich mit den richtigen Wert (z.B. durch Returnwert einer Funktion).
-
nein nein, nur die Zahlenwerte kommen von extern, eingelesen werden sie innerhalb des main und müssten doch auch da deklariert werden.
liebe Freunde, alles funktioniert einwandfrei bis auf diesen cout und auch nur in dieser Schleife. Eine Schleife weiter, wo logarithmiert wird, da sind die Wert einwandfrei enthalten.
-
ACCCCH, ich sag doch es ist früh am Morgen^^
for(int n=1 ; n < j-1 ; n++) { if(Bakt[n]>=0) { B[m] = Bakt[n]; xdot[m] = xdotakt[n]; nsum=m; cout << xdot[m] << endl; m++; } }versuch mal m erst am Schluss zu erhöhen, dann greift xdot[m] auch nicht auf undefinierten Speicher zu.
-
Dann schreibe das
m++bitte nach demcout.
-
Freunde das war es

Mensch so ein kleiner Fehler mit solch einer großen Auswirkung.....jetzt wenn man es sieht.......ist doch klar.
Dank an Euch
-
Sowas würde man auch schneller sehen, bzw. es würde gar nicht erst passieren können, wenn man etwas besser programmiert - was die Lesbarkeit und die Logik angeht.

Der Code besitzt noch viel Optimierungspotential!

Das m z.B. ist absolut überflüssig!
-
kann durchaus sein :p
nur durch das m kann ich eine unabhängige von n kreieren, welches ich laufen lassen kann und mit verschobenen Werten füllen kann.
Danke
-
... und damit eine neue Fehlerquelle einbauen, die hier sogar zugeschlagen hat! :p
Warum nicht einfach
(n-1)? Du hast doch zusätzlich noch einen Zählernsum.Edit:
(n-1)ist natürlich Quatsch, aber dennsumkannst Du statt m nehmen.Tipp: Kürze Deine Variablen nicht so stark ab. Schreibe Sie aus und wähle lesbare/verständliche Namen/Bezeichnungen.
-
Danke.

-
Bitte! 