Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
C++ dynamisches Array mit new klappt nicht
- Ersteller strohhaar
- Erstellt am
HerzogDeXtEr
Cadet 4th Year
- Registriert
- Aug. 2007
- Beiträge
- 86
Ich würde behaupten,
"y = 10;"
ist schon einmal falsch,
du solltest zumindestens einen typen zuweisen.
Aja was das Array betrifft solltest du wirklich mehr Code posten, das Anlegen ist vollkommen richtig bis auf das y
. Aber so kann man da rein gar keine Fehlerquelle erkennen!
"y = 10;"
ist schon einmal falsch,
du solltest zumindestens einen typen zuweisen.
Aja was das Array betrifft solltest du wirklich mehr Code posten, das Anlegen ist vollkommen richtig bis auf das y
BadMadMax
Lt. Junior Grade
- Registriert
- Apr. 2004
- Beiträge
- 299
es gibt doch nichts besseres als gutes altes C
ähm das funzt auch unter C++ ( vs10 )
int y=10;
int *x = ( int * ) malloc( sizeof( int ) * y );
ähm das funzt auch unter C++ ( vs10 )
BadMadMax
Lt. Junior Grade
- Registriert
- Apr. 2004
- Beiträge
- 299
das war/ist mir schon klar.
int main( void )
{
int y=10;
int *x = new int [ y ];
return ( 0);
}
Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
Array.c
Array.c(5) : error C2065: 'new' : undeclared identifier
Array.c(5) : warning C4047: 'initializing' : 'int *' differs in levels of indirection from 'int'
Array.c(5) : error C2143: syntax error : missing ';' before 'type'
Array.c(5) : error C2143: syntax error : missing ';' before '['
BadMadMax schrieb:es gibt doch nichts besseres als gutes altes C
ähm das funzt auch unter C++ ( vs10 )
Man sollte aber keinen C-Code verwenden, wenn man C++ benutzt. Auch wenn das möglich ist.
Wenn man malloc/free anstatt new/delete in C++ benutzt wird man nämlich ziemlich bald auf die Schnauze fliegen. free() ruft nämlich keinen Destruktor von Klassen auf, wenn sie zerstört werden, was delete hingegen schon macht.
An den TE:
Wo genau tritt der Fehler auf? Compile-fehler oder Laufzeit-Fehler? Welches Verhalten tritt auf? Welche Fehlermeldung?
zu deiner Fehlermeldung:
Code:
Array.c(5) : error C2065: 'new' : undeclared identifier
Zuletzt bearbeitet:
Ja, das ist mir schon klar, dass man bei Integern auch malloc/free benutzen könnte. Allerdings sollte man sich diese "schlechten Angewohnheiten" von Anfang an abgewöhnen. Irgendwann benutzt er dann eine Klasse anstatt einem Integer und wundert sich dann, warum ihm alles um die Ohren fliegt.
antred
Lt. Commander
- Registriert
- Juni 2010
- Beiträge
- 1.288
Wenn in C++ Arrays mit einer zur Kompilierzeit nicht feststehenden Größe benötigt werden, sollte man wo immer möglich std::vector den Vorzug geben.
Code:
#include <vector>
int main()
{
// erstellt vector mit 10 Integerelementen (werden alle mit 0 initialisiert).
std::vector< int > myVector( 10 );
// Zugriff geht mit [], wie man's von Arrays gewohnt ist.
myVector[ 0 ] = 3453;
// Zugriff per at() ist aber sicherer (wirft exception, wenn Index falsch).
myVector.at( 0 ) = 242;
// vector kann sogar vergrößert werden
myVector.resize( 40 );
}
- Registriert
- Nov. 2009
- Beiträge
- 410
sorry, für die späte rückmeldung. es gibt keine fehlermeldung, er baut einfach kein feld auf.
wenn ich einen haltepunkt setze, dann habe ich für z ein schönes feld, man kann sich schön den inhalt ansehen, bzw. den index.
bei x ist nichts zu sehen. wenn ich mir den inhalt, bzw. index ansehen möchte (auf "+" drücke) steht bloß -842.... da.
bsp.:
neues projekt:
wenn ich einen haltepunkt setze, dann habe ich für z ein schönes feld, man kann sich schön den inhalt ansehen, bzw. den index.
bei x ist nichts zu sehen. wenn ich mir den inhalt, bzw. index ansehen möchte (auf "+" drücke) steht bloß -842.... da.
bsp.:
neues projekt:
Code:
int main()
{
int z[5];
int y=10;
int *x = new int [y];
delete[] x;
return 0;
}
antred
Lt. Commander
- Registriert
- Juni 2010
- Beiträge
- 1.288
Das ist bloß eine Unzulänglichkeit des Debuggers.
Dein Array existiert. Belege doch einfach mal in einer for-Schleife jedes Element mit einem Wert und gibt die Werte dann in einer anderen for-Schleife aus, nur um deine Nerven zu beruhigen. 
HerzogDeXtEr
Cadet 4th Year
- Registriert
- Aug. 2007
- Beiträge
- 86
Wenn in C++ Arrays mit einer zur Kompilierzeit nicht feststehenden Größe benötigt werden, sollte man wo immer möglich std::vector den Vorzug geben.
Ich glaube nicht das man vector immer den Vorzug geben sollte, vorallem wenn man in der Lernphase ist sollte man sich erst einmal damit auseinander setzen wie man selber so etwas schreiben könnte, außerdem ist es in manchen Fällen nicht wirklich schneller bzw. sinnvoller vector zu verwenden, meiner Meinung nach lohnt sich diese Blasse nur wenn du das Array im nachhinein in seiner Größe verändern willst!
Yuuri
Fleet Admiral
- Registriert
- Okt. 2010
- Beiträge
- 13.928
HerzogDeXtEr schrieb:meiner Meinung nach lohnt sich diese Blasse nur wenn du das Array im nachhinein in seiner Größe verändern willst!
Ich sehe nichts gegenteilig behauptetes.antred schrieb:Wenn in C++ Arrays mit einer zur Kompilierzeit nicht feststehenden Größe benötigt werden, sollte man wo immer möglich std::vector den Vorzug geben.
array <-> vector: https://www.computerbase.de/forum/threads/performance-von-c-aktueller-stand.846385/HerzogDeXtEr schrieb:außerdem ist es in manchen Fällen nicht wirklich schneller bzw. sinnvoller vector zu verwenden
Nimmt sich kaum etwas, wenn du vorher Platz reservierst.
antred
Lt. Commander
- Registriert
- Juni 2010
- Beiträge
- 1.288
HerzogDeXtEr schrieb:vorallem wenn man in der Lernphase ist sollte man sich erst einmal damit auseinander setzen wie man selber so etwas schreiben könnte
Wie, du meinst, der OP sollte sich aus Lernzwecken seinen eigenen vector-Ersatz schreiben? Das hätte sicherlich einen hohen Lehrwert, würde ihn aber auch stark von seinem eigentlichen Ziel ablenken - sein Programm zum funktionieren zu bringen.
Oder schlägst du stattdessen vor, der OP sollte weder vector noch einen eigenen Ersatz verwenden sondern einfach weiterhin 'nackte' Arrays benutzen? Dem müßte ich genau so widersprechen.
Man kann nie zu früh damit anfangen, sich mit der Standard C++ Bibliothek vertraut zu machen. Einige Programmierer bleiben, wenn sie diesen wichtigen Schritt zu lange vor sich her schieben, für immer und ewig in ihrer C-mit-Klassen Welt gefangen.
Ich selbst kenne einen ganzen Haufen C++-Programmierer, die auch nach 15 Jahren und mehr Erfahrung mit C++ in Sachen C++ Standardbibliothek noch immer von Tuten und Blasen keine Ahnung haben. Da wird dann eben (wahrscheinlich bis ans Ende ihrer Karriere) weiter fröhlich mit nackten Arrays hantiert und schiefen Pointern geschossen.
Gerade als Neuling sollte man sich vom Compiler und der Standardbibliothek so viel Arbeit wie möglich abnehmen lassen. Das erlaubt einem, sich auf die eigentliche Problematik des Programmierens zu konzentrieren anstatt sich mit all den Ecken und Kanten der Sprache C++ rumzuschlagen - davon gibt es nämlich selbst mit vector & co noch mehr als genug.
Ähnliche Themen
- Antworten
- 16
- Aufrufe
- 15.108
- Antworten
- 6
- Aufrufe
- 1.727
- Antworten
- 5
- Aufrufe
- 1.412
- Antworten
- 5
- Aufrufe
- 1.945