Heap-Beschädigung Erkannt: nach dem Normalen block (#126)
Kann ich nicht für das Leben von mir herauszufinden, warum ich immer diese Debug-Fehler:
Heap-Beschädigung Erkannt: nach dem Normalen block (#126) an
0x004cF6c0
CRT festgestellt, dass die Anwendung geschrieben, um den Speicher nach dem Ende von heap Kerl.
Ich verstehe, dass Sie brauchen, um Speicher frei, wenn Sie neue Betreiber,
das habe ich getan und ich bin noch immer Probleme.
aus irgendeinem Grund das Programm nicht zu Ende, richtig in die rekursive Funktion.
Ich gedebuggt und es ging durch jede Zeile code mit breakpoints.
Am Ende der if-Anweisung in countSum es irgendwie subtrahiert 1 von ich
und dann kommt wieder die if-block.....was es nicht tun soll.
Warum ist das passiert?
/*this program calculates the sum of all the numbers in the array*/
#include <iostream>
#include <time.h>
using namespace std;
/*prototype*/
void countSum(int, int, int, int*);
int main(){
bool flag;
int num;
int sum = 0, j=0;
int *array = new int;
do{
system("cls");
cout<<"Enter a number into an array: ";
cin>>array[j];
cout<<"add another?(y/n):";
char choice;
cin>>choice;
choice == 'y' ? flag = true : flag = false;
j++;
}while(flag);
int size = j;
countSum(sum, 0, size, array);
//free memory
delete array;
array = 0;
return 0;
}
void countSum(int sum, int i, int size, int *array){
if (i < size){
system("cls");
cout<<"The sum is :"<<endl;
sum += array[i];
cout<<"...."<<sum;
time_t start_time, stop_time;
time(&start_time);
do
{
time(&stop_time); //pause for 5 seconds
}
while((stop_time - start_time) < 5);
countSum(sum, (i+1) , size, array); //call recursive function
}
}
InformationsquelleAutor user1066524 | 2012-07-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
array
hält genug Platz für eine einzelneint
:aber es ist möglicherweise ein Versuch, legen Sie mehr als eine
int
dessen Folge in den Speicher geschrieben wird, nicht verfügbar ist. Verwenden Sie entweder einestd::vector<int>
oder es muss bekannt sein, vorher die maximale Anzahl vonint
s, eingegeben werden, bevorarray
zugeordnet ist.Ist dies eine Lern-übung, und Sie nicht verwenden möchten
std::vector<int>
Sie könnte der Benutzer aufgefordert werden, geben Sie die Anzahl derint
s, die Sie eingeben möchten:Dann akzeptieren
size
Anzahl derint
s. Verwendendelete[]
wenn Sienew[]
.Es bedeutet, dass die Größe nicht bekannt sein müssen, zur compile-Zeit, aber es wird nicht automatisch wachsen:
std::vector<int>
würde.ja, ich weiß, Vektoren sind besser. meinen Lehrer natürlich gefragt für ein array....obwohl arrays sind unglaublich ärgerlich und nicht sehr hilfreich, wenn es um die Daten.
kann mir jemand erklären, was ist der Punkt, der ein dynamisches array? Ich weiß, es kann erweitern einer bereits zugewiesenen Arrays....aber das scheint einfach unrealistisch, weil nicht jedes Szenario wird eine vorher festgelegte Anzahl.
Wie Sie erweitern Sie einen bereits reservierten Arrays??
InformationsquelleAutor hmjd
War die Lösung, um die Größe new int[size]....obwohl ich mir Wünsche, dass Sie nicht haben, um eine Größe, wenn es dynamisch ist.
InformationsquelleAutor user1066524