[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Find fejlen...



Hej!

Jeg er i gang med et program i C, men det opfører sig underligt. Der er
problemer med at modtage værdien der returneres fra en funktion, og jeg
har voldsomt på fornemmelsen at der er en hukommelses-kollision mellem
forskellige programdele et sted.

Hvis nogen her på listen har lyst til at hjælpe med debugging (og evt.
optimering) vil det være dejligt :-) (Jeg har selv kun et par ugers
erfaring med C...)

Programmet kan hentes på http://www.fys.ku.dk/~nvj/lvnint.tar.gz [1] En
kopi af denne mail ligger i helpme.txt

Strukturen er:
main.c løber i løkke over rk.c
rk.c løber igen i løkke over rkstep.c
rkstepc.c kalder drhodt.c flere gange.

Div. hjælpefiler:
add18arr.c
scalmult18arr.c
parstruct.h

main.c er en dummy der skal ændres noget, når jeg har fået skidtet til at
virke.

Problemet er, at når den kalder rk.c, er returværdien tilsyneladende
ganske uforudsigelig:

sslug@sslug lvn]$ gcc main.c -o go rk.c rkstep.c drhodt.c add18arr.c
scalmult18arr.c -g -lm -I . && ./go
0.000000 3.119897e-10 0.000000 -1.668159e+09
0.100000 2.968137e-10 0.100000 1.220695e+09
0.200000 2.583010e-10 0.200000 1.553029e+09
0.300000 2.049906e-10 0.300000 -1.929401e+09
0.400000 1.447555e-10 0.400000 1.743589e+09
(flere linier fjernet)

Her skulle kolonnerne 1 og 2 gerne være det samme som 3 og 4. Værdierne i
kolonne 2 er de fysisk korrekte resultater, så et eller andet virker da...
(De relevante printf's er i main.c: 46 og rk.c: 49
Hvis jeg f.eks. erstatter rk.c: 50 med "return 1.23456;" modtager main.c
værdien 22 hver gang.
Helt galt går det hvis jeg kompilerer det med optimering:

sslug@sslug lvn]$ gcc -O3 main.c -o go rk.c rkstep.c drhodt.c add18arr.c
scalmult18arr.c -g -lm -I . && ./go
0.000000 3.115094e-10 0.000000 2.200000e+01
0.100000 2.973507e-10 0.100000 2.200000e+01
- Her hænger programmet. Andre tests viser at løkken over rkstep modtager
forkerte parametre på en eller anden måde, og derfor er uendelig. Igen må
der være hukommelseskollision et sted.

Jeg har af hastighedshensyn adskillige globale variable. (Og også fordi
det er
praktisk at rkstep kan ændre t og h direkte) Det drejer sig om:
double t;
double h;
double tdelay_g;
struct par_t params_g;

Har jeg dummet mig med deklareringen e.l.? Hvor?

Anvendt compiler:
sslug@sslug lvn]$ gcc -v
Reading specs from /usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2/specs
Configured with: ../configure --prefix=/usr --libdir=/usr/lib
--with-slibdir=/lib --mandir=/usr/share/man --infodir=/usr/share/info
--enable-shared --enable-threads=posix --disable-checking
--enable-long-long --enable-__cxa_atexit
--enable-languages=c,c++,ada,f77,objc,java --host=i586-mandrake-linux-gnu
--with-system-zlib
Thread model: posix
gcc version 3.2 (Mandrake Linux 9.0 3.2-1mdk)

Det ville være dejligt hvis nogen kunne finde fejlen, for jeg kan ikke.
Hvis der derudover er tips til optimering er de velkomne (hastighed er
kritisk)

I øvrigt en tak til Donald Axel for hans c-bog, ifald han læser dette.

mvh

	Niels

[1] Programmet (under GPL) laver en numerisk integration for at løse et
fysik-problem. (Den anvendte algoritme er beskrevet i "Numerical recipes
in C" der kan hentes fra
http://www.numerical-recipes.com/nronline_switcher.html) Det vil
sandsynligvis blive brugt af under 20 mennesker på verdensplan...


"Mats kommer att leda utbildningar inom främst Windows NT och Windows
2000, ett kompetensområde som han arbetat inom i över tjugo år"
http://www.cornerstone.se/foretaget/personal/show_teacher.asp?teacher_id=36




 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:09 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *