G
gruenpflanze
Mitglied
Hallo!
Erstmal vorweg, weshalb ist die Textverarbeitung (string, char, input-methoden) eigentlich so kompliziert unter C++? Oder kommt nur mit das so kompliziert vor?
Folgendes vereinfachtes Programm soll mein Problem zeigen:
Ich habe eine string Variable, die ich an eine Funktion übergeben will damit diese verarbeitet werden kann.
Der Output schaut so aus:
Ich vermute, dass es am Gültikeitsbereich der Stringvariable liegt. Kann es sein, dass der Pointer in der Funktion schon ins Leere zeigt? Bin mit der Fehlermeldung überfordert.
Vielen Dank!
Ach ja, der Fehler wird zur laufzeit ausgegeben, d.h. das kompilieren mit c++ (unter debian) hat funktioniert.
Danke!
Erstmal vorweg, weshalb ist die Textverarbeitung (string, char, input-methoden) eigentlich so kompliziert unter C++? Oder kommt nur mit das so kompliziert vor?
Folgendes vereinfachtes Programm soll mein Problem zeigen:
Ich habe eine string Variable, die ich an eine Funktion übergeben will damit diese verarbeitet werden kann.
Code:
#include <iostream>
#include <string>
using namespace std;
string test(string hallo); //deklarierung der Funktion
string hallo="hehey";
int main()
{
test(hallo); //test wird aufgerufen und hallo übergeben.
}
string test(string hallo)
{
cout << ""<<hallo;
}
Der Output schaut so aus:
*** glibc detected *** ./a.out: free(): invalid pointer: 0xbfff980c ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7dc47cd]
/lib/tls/i686/cmov/libc.so.6(cfree+0x90)[0xb7dc7e30]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb7f86d11]
/usr/lib/libstdc++.so.6(_ZNSs4_Rep10_M_destroyERKSaIcE+0x1d)[0xb7f63a5d]
/usr/lib/libstdc++.so.6(_ZNSsD1Ev+0x57)[0xb7f665e7]
./a.out(__gxx_personality_v0+0x245)[0x8048979]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xdc)[0xb7d72ebc]
./a.out(__gxx_personality_v0+0x4d)[0x8048781]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:02 4620295 /home/michael/maturaarbeit/tests/a.out
08049000-0804a000 rw-p 00000000 08:02 4620295 /home/michael/maturaarbeit/tests/a.out
0804a000-0806b000 rw-p 0804a000 00:00 0 [heap]
b7c00000-b7c21000 rw-p b7c00000 00:00 0
b7c21000-b7d00000 ---p b7c21000 00:00 0
b7d5c000-b7d5d000 rw-p b7d5c000 00:00 0
b7d5d000-b7e98000 r-xp 00000000 08:02 2428132 /lib/tls/i686/cmov/libc-2.5.so
b7e98000-b7e99000 r--p 0013b000 08:02 2428132 /lib/tls/i686/cmov/libc-2.5.so
b7e99000-b7e9b000 rw-p 0013c000 08:02 2428132 /lib/tls/i686/cmov/libc-2.5.so
b7e9b000-b7e9e000 rw-p b7e9b000 00:00 0
b7e9e000-b7ea9000 r-xp 00000000 08:02 2424896 /lib/libgcc_s.so.1
b7ea9000-b7eaa000 rw-p 0000a000 08:02 2424896 /lib/libgcc_s.so.1
b7eaa000-b7eab000 rw-p b7eaa000 00:00 0
b7eab000-b7ed0000 r-xp 00000000 08:02 2428140 /lib/tls/i686/cmov/libm-2.5.so
b7ed0000-b7ed2000 rw-p 00024000 08:02 2428140 /lib/tls/i686/cmov/libm-2.5.so
b7ed2000-b7fb1000 r-xp 00000000 08:02 2132136 /usr/lib/libstdc++.so.6.0.8
b7fb1000-b7fb4000 r--p 000de000 08:02 2132136 /usr/lib/libstdc++.so.6.0.8
b7fb4000-b7fb6000 rw-p 000e1000 08:02 2132136 /usr/lib/libstdc++.so.6.0.8
b7fb6000-b7fbc000 rw-p b7fb6000 00:00 0
b7fc8000-b7fcb000 rw-p b7fc8000 00:00 0
b7fcb000-b7fe4000 r-xp 00000000 08:02 2424853 /lib/ld-2.5.so
b7fe4000-b7fe6000 rw-p 00019000 08:02 2424853 /lib/ld-2.5.so
bffe5000-bfffa000 rw-p bffe5000 00:00 0 [stack]
ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso]
heheyAborted (core dumped)
Ich vermute, dass es am Gültikeitsbereich der Stringvariable liegt. Kann es sein, dass der Pointer in der Funktion schon ins Leere zeigt? Bin mit der Fehlermeldung überfordert.
Vielen Dank!
Ach ja, der Fehler wird zur laufzeit ausgegeben, d.h. das kompilieren mit c++ (unter debian) hat funktioniert.
Danke!