Merkwürdiger Fehler mit Pointer-Arrays
-
Hi,
weiß jemand, warum folgender Code nicht richtig funktioniert?
#include <iostream> using namespace std; class TestClass { public: TestClass** array; TestClass(TestClass** _array) : array(_array) {} }; TestClass* test1 = 0; TestClass* test2 = 0; void init_test1() { TestClass* arr[] = { 0 }; test1 = new TestClass(arr); } void init_test2() { init_test1(); TestClass* arr[] = { 0, test1 }; test2 = new TestClass(arr); } int main(int argc, char** argv) { init_test2(); cout << "test2->array[1]: " << test2->array[1] << endl; cout << "test2->array[1]: " << test2->array[1] << endl; cout << "test1: " << test1 << endl; delete test1; delete test2; }Die Ausgabe ist bei mir:
test2->array[1] : 0x804a008 test2->array[1] : 0x8049c20 test1: 0x804a008Eigentlich sollte der Pointer alle drei mal gleich bleiben, erst recht in den ersten beiden Zeilen.
Valgrind gibt mir folgenden Fehler:==14731== Invalid read of size 4 ==14731== at 0x804880B: main (in /home/pumphaus/Documents/Programmierung/test4/test) ==14731== Address 0xBED1ED20 is just below the stack ptr. To suppress, use: --workaround-gcc296-bugs=yesAllerdings benutze ich GCC 4.1 und nicht 2.9.6.
Woher kann dieser Fehler kommen? Ich bin langsam schon am verzweifeln.
Danke im Voraus,
Pumphaus
-
void init_test1() { TestClass* arr[] = { 0 }; test1 = new TestClass(arr); }du kopierst nie. und arr wird am ende der funktion zerstört. du hast also massig zeiger auf massig speicher der nicht dir gehört. und das gibt: undefiniertes verhalten.
-
Shade Of Mine schrieb:
du kopierst nie. und arr wird am ende der funktion zerstört. du hast also massig zeiger auf massig speicher der nicht dir gehört. und das gibt: undefiniertes verhalten.
Ah, ich wusste doch, dass es etwas so simples is... Wenn man Stunden lang auf den Code starrt, ohne Pause, fällt einem sowas einfach nicht ein... -.-
Danke auf jeden Fall :). Weiß nicht, wie lang es gedauert hätte, bis ich von allein drauf gekommen wär.