Wieso funktioniert dieser Code nicht?
-
Guten Abend Freunde ich bin C++ Anfänger und versuche die Aufgabe in meinen Lernbuch zu lösen,aber leider bringt Windows immer eine Fehlermedung nachdem alle Werte eingegeben wurden(Code folgt) in den Lösungen zu meinem Buch ist es anders gelöst ohne Funktionen ich weiß diese Funktion ist so nicht wircklich effektiv gegenüber dem Code ohne Funktion aber ich habe es jetzt so gemacht und optimieren kann man ja später immernoch
jetzt würdeich aber dennoch immernoch gern wissen warum der Fehler nach der eingabe der Werte kommt.
OS:Windows
[code] #include<iostream> using namespace std; rechnen(int* pntr,int anzahl){ int temp; for(;anzahl>0;anzahl--) temp+=pntr[anzahl-1]; delete(pntr); return temp/anzahl; } int main(int argc,char* argv[]){ int anzahl; cout<<"Wie viele Werte wollen sie eingeben?"<<endl; cin>>anzahl; int*pntr= new int (anzahl); int i; for(i=0;i<anzahl;i++){ cout<<"Bitte gib den "<<i+1<<" Wert ein:"; cin>>pntr[i]; system("cls"); } cout<<"Der Durchschnitt ihrer "<<anzahl<<" Werte ist:"<<rechnen(pntr,anzahl); return 0; }
und wie ist eigentlich der Fachbegriff für diese Arrays auf dem Heak?
danke im Vorraus
-
Hi,
du hast vergessen, die Fehlermeldung und die dazugehörige Zeilenangabe zu posten.
Array im Heap = dynamisches Array
-
Was ist denn das bitte für ein Lehrbuch?!
Das sieht aus wie C mit IO-streams...
-
Du meinst
int*pntr= new int[anzahl];
-
Ein anständiges Buch sollte dir vorher std::vector beigebracht haben.
-
int*pntr= new int (anzahl);
Hier wird kein Array dynamisch erzeugt, sondern nur ein einzelnes int, welches mit dem Wert von anzahl initialisiert wird.
Du möchtest wahrscheinlöich eckige Klammern verwenden:int*pntr= new int [anzahl];
erzeugt ein Array aus anzahl ints, die nicht initialisiert sind. Zu einem new[] gehört dann entsprechend auch eine delete [] statt einfachem delete.
-
ich habe den Code noch etwas überarbeitet allerding funktioniert er immer noch nicht nach der eingabe der werte kommt ein windows fenster "Das Programm funktioniert nicht mehr..."
#include<iostream> using namespace std; rechnen(int* pntr,int anzahl){ int temp; for(;anzahl>0;anzahl--) temp+=pntr[anzahl-1]; delete[] pntr; return temp/anzahl; } int main(int argc,char* argv[]){ int anzahl; cout<<"Wie viele Werte wollen sie eingeben?"<<endl; cin>>anzahl; int*pntr= new int [anzahl]; int i; for(i=0;i<anzahl;i++){ cout<<"Bitte gib den "<<i+1<<" Wert ein:"; cin>>pntr[i]; system("cls"); } cout<<"Der Durchschnitt ihrer "<<anzahl<<" Werte ist:"<<rechnen(pntr,anzahl); return 0; }
-
Welchen Wert hat anzahl in Zeile 11?
-
Was für einen Compiler hast du, daß der Code bei dir überhaupt kompiliert?
In Zeile 4 fehlt vor dem Funktionsnamen der Rückgabe-Datentyp (int): Ideone-CodeUnd das Löschen des Arrays innerhalb dieser Funktion ist auch keine gute Idee.
-
Und das
int temp;
ist auch nicht initialisiert. Das heißt, dasstemp
irgendeinen Startwert hat, aber nicht zwangsläufig 0. Daher ist deine Summe falsch. Nutzestd::accumulate
zum Summieren.