c++ vector-problem

G

ganymed

bluefish
ich hab einen ziemlich seltsamen fehler, den ich bei manchen programmdurchläufen erhalte. seltsam ist auch, dass ich sie manchmal bekommen und manchmal nicht, auch wenn ich sonst nix verändere.
der fehler kommt erst nachdem ich 2 eingaben im programm gamcht hab.
Code:
vector<float> kf;
damit erstelle ich einen vector.
Code:
kf.resize(grad);
das soll die anzahl der elemente auf eine bestimmte zahl bringen (meistens so um die 10).
Code:
while(akt_grad>0){
akt_grad=akt_grad-1;		
cout<<"Koeffizient "<<akt_grad<<"? ";
cin>>kofix;
if(! cin.fail()){
kf[akt_grad]=kofix;//gib dem aktuellen grad seine koeffizienten
cout<<"Koeffizient des Grades"<<akt_grad<<" ist "<<kf[akt_grad]<<endl<<endl; //bestaetige mit ausgabe aus dem vector	
}
else{
cout<<"Eingabe ungültig."<<endl;
return 1;
}
}//ende while akt_grad>0
ich will hier nur jedem grad einen koeffizienten zurodnen und den im vector speichern. (es geht um ganzrationale gleichungen).
in diesem teil kommt es dann meiste nach der 2. eingabe zu folgender fehlermeldung:
*** glibc detected *** ./eunomia: malloc(): memory corruption (fast): 0x0804e2f8 ***
======= Backtrace: =========
/lib/libc.so.6[0xb7da0b00]
/lib/libc.so.6[0xb7da2dfd]
/lib/libc.so.6(malloc+0x85)[0xb7da45d5]
/usr/lib/libstdc++.so.6(_Znwj+0x29)[0xb7f476c9]
/usr/lib/libstdc++.so.6(_ZNSs4_Rep9_S_createEjjRKSaIcE+0x34)[0xb7f22e34]
/usr/lib/libstdc++.so.6(_ZNSs4_Rep8_M_cloneERKSaIcEj+0x3a)[0xb7f239ba]
/usr/lib/libstdc++.so.6(_ZNSs7reserveEj+0x49)[0xb7f24559]
/usr/lib/libstdc++.so.6(_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd+0x34)[0xb7f0df24]
/usr/lib/libstdc++.so.6(_ZNSirsERd+0xd7)[0xb7ef74a7]
./eunomia(__gxx_personality_v0+0x339)[0x8048ce1]
/lib/libc.so.6(__libc_start_main+0xd8)[0xb7d527c8]
./eunomia(__gxx_personality_v0+0x69)[0x8048a11]
======= Memory map: ========
08048000-0804c000 r-xp 00000000 08:03 12746808 /home/konstantin/cpp/eunomia/eunomia
0804c000-0804d000 rw-p 00003000 08:03 12746808 /home/konstantin/cpp/eunomia/eunomia
0804d000-0806e000 rw-p 0804d000 00:00 0 [heap]
b7c00000-b7c21000 rw-p b7c00000 00:00 0
b7c21000-b7d00000 ---p b7c21000 00:00 0
b7d3b000-b7d3d000 rw-p b7d3b000 00:00 0
b7d3d000-b7e61000 r-xp 00000000 08:03 10534924 /lib/libc-2.5.so
b7e61000-b7e62000 r--p 00124000 08:03 10534924 /lib/libc-2.5.so
b7e62000-b7e64000 rw-p 00125000 08:03 10534924 /lib/libc-2.5.so
b7e64000-b7e67000 rw-p b7e64000 00:00 0
b7e67000-b7e71000 r-xp 00000000 08:03 14322463 /usr/lib/libgcc_s.so.1
b7e71000-b7e72000 rw-p 00009000 08:03 14322463 /usr/lib/libgcc_s.so.1
b7e72000-b7e95000 r-xp 00000000 08:03 10534934 /lib/libm-2.5.so
b7e95000-b7e97000 rw-p 00022000 08:03 10534934 /lib/libm-2.5.so
b7e97000-b7f71000 r-xp 00000000 08:03 14322466 /usr/lib/libstdc++.so.6.0.8
b7f71000-b7f74000 r--p 000d9000 08:03 14322466 /usr/lib/libstdc++.so.6.0.8
b7f74000-b7f76000 rw-p 000dc000 08:03 14322466 /usr/lib/libstdc++.so.6.0.8
b7f76000-b7f7c000 rw-p b7f76000 00:00 0
b7f94000-b7f97000 rw-p b7f94000 00:00 0
b7f97000-b7f98000 r-xp b7f97000 00:00 0 [vdso]
b7f98000-b7fb2000 r-xp 00000000 08:03 10534917 /lib/ld-2.5.so
b7fb2000-b7fb3000 r--p 00019000 08:03 10534917 /lib/ld-2.5.so
b7fb3000-b7fb4000 rw-p 0001a000 08:03 10534917 /lib/ld-2.5.so
bffbd000-bffd2000 rw-p bffbd000 00:00 0 [stack]
Abgebrochen
das kapier ich gar nicht mehr.
beim kompilieren erhalte ich weder warnungen noch fehler.
 
Hast Du das Programm mal mit '-O0 -g' kompiliert und dann mit gdb gestartet? Das sollte Dir genauere Angaben geben, wo der Fehler auftritt, inklusive Zeilenangaben.
 
ok. hab ich mal gemacht. bei den ersten anläufen keine fehlermeldungen später dann schon:
nach der fehlermeldung kommt:
Program received signal SIGABRT, Aborted.
0xb7f00410 in ?? ()
where liefert:
(gdb) where
#0 0xb7f74410 in ?? ()
#1 0xbfa3af4c in ?? ()
#2 0x00000006 in ?? ()
#3 0x000010d3 in ?? ()
#4 0xb7d42721 in raise () from /lib/libc.so.6
#5 0xb7d43ef8 in abort () from /lib/libc.so.6
#6 0xb7d77e6b in __libc_message () from /lib/libc.so.6
#7 0xb7d7db00 in malloc_printerr () from /lib/libc.so.6
#8 0xb7d7fdfd in _int_malloc () from /lib/libc.so.6
#9 0xb7d815d5 in malloc () from /lib/libc.so.6
#10 0xb7f246c9 in operator new () from /usr/lib/libstdc++.so.6
#11 0xb7effe34 in std::string::_Rep::_S_create () from /usr/lib/libstdc++.so.6
#12 0xb7f009ba in std::string::_Rep::_M_clone () from /usr/lib/libstdc++.so.6
#13 0xb7f01559 in std::string::reserve () from /usr/lib/libstdc++.so.6
#14 0xb7eeb064 in std::num_get<char, std::istreambuf_iterator<char, std::char_traits<char> > >::do_get () from /usr/lib/libstdc++.so.6
#15 0xb7ed45f7 in std::istream::operator>> () from /usr/lib/libstdc++.so.6
#16 0x08048ca8 in main () at eunomia.cc:38
das ist die hier:
Code:
38: cin>>kofix;
wo liegt jetzt der fehler? (das um zeile 38 herum seht ihr in meinem vorherigen beitrag.)
Code:
float kofix;//koeffizient fuers einlesen von daten und schieben in den vektor
da definiere ich kofix.
was mach ich falsch?
edit:
-----------------------
ok. hab nochmal ein bisschen rumprobiert. denke jetzt dass es was mit speicher zu tun hat. wenn ich einen größeren vector erzeuge tritt der fehler später auf.
beispiel:
vector mit 5 elementen->fehler nach setzten des 2. elements
vector mit 99 elementen->fehler nach setzen des 2. elements
vector mit 99999 elementen -> fehler nach setzenerst seehr sehr spät (bis zum 100. element kein fehler)

edit 2:
------------------------------------
nach dem ich für jedes element einmal kf.push_back(*irgendeine seltsame zahl*) ausführe kommen keine fehler mehr.
 
Zuletzt bearbeitet:

Ähnliche Themen

XEN 4.3 GMP Problem

serdisplib C++ double free or corruption

Fehlermeldung beim SSH-Login / Server nicht mehr erreichbar

Ubuntu X / dbus problem

Displayport + externer Monitor zeigt bei startx nichts erst bei DVI

Zurück
Oben