Werte in array einlesen -> Heap-Fehler, Zugriffsverweigerung ?!
-
Hallo,
ich möchte eine Konsolenanwendung schreiben, die Messwerte in ein array einliest, mit dem man dann später weiterarbeiten kann. soweit ja nicht schwer, das programm funktioniert soweit auch einwandfrei, solange die array länge den wert 4 (also 4 messwerte werden abgespeichert) nicht überschreitet. ab länge 5+ bekomme bricht das programm bei der ausgabe der messwerte (2.for-schleife) ab und gibt die unten angezeigte fehlermeldung aus.
desweiteren sagt es mir, dass windows einen haltepunkt ausgelöst hat, und irgendwas mit heap-verletzung. was ist falsch und wie kann ich das problem beseitigen??
#include <iostream> using namespace std; double *createArray(int length){ double* arr = new double(length); return arr; } int main(){ cout<<"Array-Laenge: "<< endl; int length; cin >> length; double* arr = createArray(length); cout<<"Bitte geben Sie Ihre Messwerte ein!"<< endl; int i; for (i=0; i<length; i++){ cin >> arr[i]; } cout<<"Danke"<< endl; cout<<" "<< endl; cout<<"Ihre Messwerte lauten: "<< endl; for (i=0; i<length; i++) { cout<<"[Index:] "<<i<<" --"<<arr[i]<< endl; } system("Pause"); }Unbehandelte Ausnahme bei 0x7c812afb in test.exe: Microsoft C++-Ausnahme: std::bad_alloc an Speicherposition 0x0012fc84..
Vielen Dank für eure Aufmerksamkeit !
Lg max
-
double* arr = new double(length);Das hier erzeugt kein Array sondern einen double mit Wert length.
Bevor ich mir den Rest des Programms angucke: Nimm std::vector. Genau dafür ist der da.
-
Zudem auch noch mit new/new[] angeforderten Speicher wieder mit delete/delete[] freigeben!
#include <iostream> using namespace std; int main() { cout << "Array-Laenge: " << endl; int length; cin >> length; double* arr = new double[length]; // mit new[] angeforderten Speicher ... cout << "Bitte geben Sie Ihre Messwerte ein!" << endl; for (int i = 0; i < length; i++) // dafür gibt es zwar ein etwas elegantere lösung aber erstmal solltest Du die Grundlagen beherrschen ;) cin >> arr[i]; cout << "Danke, Ihre Messwerte lauten: " << endl; for (int i = 0; i < length; i++) cout << "[Index:] " << i << " --" << arr[i] << endl; delete[] arr; // ... auch mit delete[] wieder freigeben! cin.get(); // system("pause"); pfui ... return 0; // wer schon "int main" schreibt muss auch etwas zurückgeben ... }Aber wie SeppJ schon schrieb, kannst Du auch einen std::vector< T > nehmen. Damit ersparst Du Dir ggf. die Abfrage nach der Anzahl der Messwerte und, kannst unabhängig wieviel man eingibt, Messwerte einlesen/ausgeben.
Gut Schuß
VuuRWerK
-
VuuRWerK schrieb:
// wer schon "int main" schreibt muss auch etwas zurückgeben ...Nein, muss er nicht. Und er soll auch nichts anderes als "int main" schreiben.
-
Ach ich schlaumeier hab ja wirklich new double() statt new double[] eingeben. funktioniert jetzt alles einwandfrei, vielen Dank !!!

-
Schau dir für die Zukunft trotzdem mal die STL-Container an. Die nehmen dir enorm viel Arbeit ab und beseitigen etliche Fehlerquellen.
-
werde ich machen, danke für den tipp
