Also erstmal Hallo @ Community. (Mein erster Beitrag )
Tja, der Erste Beitrag und Was sollte es anderes sein als ne Frage.
Da mein Wissensstand (gefühlt) jedoch in etwa gleich hoch ist wie die Beitragszahl (aktuell noch) bitte nicht zu sehr in die "Kiste" greifen.
Ich lese aktuell einige Bücher zum Programmieren in C++ und arbeite (noch) in der Konsole.
Hab folgendes Problemchen:
|
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
|
#include <iostream>
#include <conio.h>
using namespace std;
// Würde ich in eine Header Datei packen (Test.h)
class C_Test{
protected:
int m_Wert1;
int m_Wert2;
public:
C_Test();
~C_Test();
void DatenAusgeben ();
};
// Würde ich in eine Quelltext datei schreiben (Test.cpp)
C_Test ::C_Test(){
cout << "Konstruktor aufgerufen\n";
}
C_Test :: ~C_Test(){
cout << "Destruktor aufgerufen\n";
}
void C_Test:: DatenAusgeben(){
cout << "Datenausgabe\n";
}
// Hauptprogramm (sofern man dabei von "Programm" sprechen darf => dennoch Main.cpp
int main (void){
int Wertarray;
int Ausgabe;
cout << "Wieviel instanzen?:\n";
cin >> Wertarray;
//Speicher freischaufeln
C_Test *pZeiger = new C_Test[Wertarray];
cout << "Nummer fuer Ausgabe:\n";
cin >> Ausgabe;
pZeiger[Ausgabe].DatenAusgeben();
//Seicher freigeben
delete[] pZeiger;
pZeiger = NULL;
_getch();
return 0;
}
|
Als erstes wird auffallen, dass ich auf Kommentare fast zu 100% verzichtet hab. Erstens braucht ihr hier nicht nen "Anfängertext mit 100 // Zeilen" und 2tens muss ich hier ja nichts "wichtiges" hervorheben. Dennoch habe ich paar // gesetzt um diese gleich mal als Frage zu nehmen.
1.) Wäre eine Aufteilung in Datein (.h // . cpp) so richtig, oder müsste das anders aussehen? (klar ist das bei diesem Projekt mit der Pumpgun auf Spatzen, daher auch der Text in einem Aufguss)
und jetzt zum eigentlichen Problem.
2.)
Also wenn ich mich nicht irre, dann habe ich mit dem ersten abgefragten Wert einen Speicher (ja, ohne Prüfung ob verfügbar oder nicht und auch nicht mit Eingabekontrolle usw usw) am heap freigeschaufelt.
Habe also ein Array mit X Instanzen der Klasse C_Test erzeugt.
Okay..
Wenn ich aber nu hergehe und den 2ten abgefragten Wert >= dem ersten mache (also 10 instanzen, aber ausgabe 45 von mir aus) müsste ich doch normal auf einen Speicher zugreifen der gar nicht belegt sein kann (von mir), oder? Dennoch ist es so, dass wenn ich diesen Code compiliere, dass ich keinerlei Fehlermeldungen erhalte und auch die Ausgabe von wegen "Datenausgabe" immer am Bildschirm erscheint, auch wenn der Bereich nicht von mir reserviert wurde.
Gott bin ich mies im erklären... Bildschirmausgabe hilft
Wieviel Instanzen?:
3
Konstruktor aufgerufen
Konstruktor aufgerufen
Konstruktor aufgerufen
Nummer fuer Ausgabe:
20
Datenausgabe
Destruktor aufgerufen
Destruktor aufgerufen
Destruktor aufgerufen
Vllt erklärt das Verhalten des "Programms" das ganze ein bisschen besser als ich
Müsste da kein fehler auftauchen, oder hab ich einfach nur Glück oder oder oder...
Ich sag jetzt schonmal DANKE für eventuelle Antworten
LG
Amico (Anfänger der gern mehr wissen würde)