Hallo Leute,
ich arbeite momentan an einem Spiel und habe ein Problem mit einem Zeiger.
Aus Klasse A wird die Adresse von
Foo dem Zeiger
Foo aus Klasse B übergeben und
die Adresse von
Foo aus Klasse B wird dem Zeiger
Foo aus Klasse C übergeben...
Problem:
Wenn ich probiere diese Zeiger ordnungsgemäß zu löschen, erscheint
asserion-Fehler:
Debug assertion failed!
[...]
_block_type_is_valid(phead- nblockuse)
Im Internet habe ich bereits gelesen, dass der Fehler bedeutet, das ich etwas doppelt lösche.
Doch ich komme nicht darauf, wo ich diesen Fehler verursache.
Minimalbeispiel:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#include <iostream>
using namespace std;
class C
{
private:
int *Foo;
public:
C(int *passed_Foo)
{
Foo = passed_Foo;
*Foo = 12;
}
~C()
{
cout << "Destructor C" << endl;
delete Foo;
}
};
class B
{
private:
int *Foo;
C *C_Foo;
public:
B(int *passed_Foo)
{
Foo = passed_Foo;
C_Foo = new C(Foo);
cout << *Foo << endl;
}
~B()
{
cout << "Destructor B" << endl;
delete Foo;
delete C_Foo;
}
};
class A
{
private:
int Foo;
B *B_Foo;
public:
A()
{
Foo = 1;
B_Foo = new B(&Foo);
}
~A()
{
delete B_Foo;
}
};
int main()
{
A *A_Foo = new A ();
delete A_Foo;
system("PAUSE");
return 0;
}
|
P.S.:
Ich bin noch Anfänger, was Pointer/Zeiger betrifft. Also kann es sein, dass mein Problem total absurd und
simpel ist.