2016-03-30 4 views
-1

Wurde Code für eine Zuordnung schreiben, um ganze Zahlen als Eingabe zu nehmen und sie in ein Array zu drucken.C++ Dump Stack-Trace zu * .exe.stackdump

Ich putze bis alle meine Zeiger auf, als ich sagen kann, aber ich erhalte immer den Laufzeitfehler:

1 [main] new 3444 cygwin_exception::open_stackdumpfile: Dumping stack trace to new.exe.stackdump

Körper Code:

#include <iostream> 
#include <sstream> 
#include <string> 
using namespace std; 

int array[10]; 
int * p = array; 

int *readNumbers() 
{ 
    int i=0; 
    for(i=0;i<10;i++) 
    { 
     string number; 
     int numb; 
     cout << "enter digit " << i << " of 10" << endl; 
     getline(cin, number); 
     istringstream (number) >> numb; 
     array[i]=numb; 
    } 
    return p; 
    delete p; 
} 

void printNumbers(int *numbers,int length) 
{ 
    int i; 
    for(i=0;i<length;i++) 
    { 
     cout << i << " " << *(numbers+i) << endl; 
    } 
} 

und die Haupt Anrufcode:

#include <iostream> 
#include <sstream> 
#include <string> 
using namespace std; 

extern int *readNumbers(); 
extern void printNumbers(int *,int); 


int main() 
{ 
    int * q = readNumbers(); 
    printNumbers(q,10); 
    delete q; 
    return 0; 
} 

Also nur auf der Suche nach einer Lösung für den Stapel dump ... Auch ich bin sicher, dass die Methode, die ich verwendet, um die string number zurückgegeben von cin auf die in array[10] enthaltenen Werte anzuwenden ist nicht das, was die Frage war, so dass alle Hinweise darauf wäre großartig. Danke

+0

Die beste Lösung hängt von Ihrer Entwicklungsumgebung ab, also müssen Sie mehr über Ihr Betriebssystem, Compiler, IDE usw. erklären. – nodakai

+1

Randbemerkungen: 'delete p;' nach 'return p;' wird nie ausgeführt. Warum würdest du etwas löschen, das sowieso nicht mit new zugeteilt wurde? Das gilt tatsächlich für 'delete q;' in Ihrer Hauptfunktion, die meiner Meinung nach die Ursache Ihres Absturzes ist. –

+1

Sie sollten q in Ihrem Hauptaufrufcode nicht löschen, da q auf Array zeigt – stan

Antwort

1

Ihre delete sind ungültig, Sie können nur etwas löschen, das Sie mit new zugewiesen haben.

Die erste ist harmlos, weil es nach einer Rückkehr ist, also nie ausgeführt (BTW sollten Sie sich Compiler-Warnungen ansehen).

Die zweite könnte Ihren Absturz verursachen.

Also I'm sure the method I used to apply the string number returned by cin to the values contained in array[10] is not what the question was looking for so any notes on that would be great. 

Das ist OK. Was zweifelhaft ist, ist die Verbreitung der Größe des Arrays überall, was passiert, wenn Sie es ändern wollen?

2

Es ist keine gute Methode, einen Zeiger auf einen Speicher zurückzugeben, der in einer Funktion zugewiesen ist. In diesem Fall werden Sie ihn nicht einmal innerhalb einer Funktion zuweisen, sondern in einem globalen Bereich. Es empfiehlt sich, alle Warnungen während des Kompilierens zu aktivieren und sie sogar als Fehler zu behandeln, wenn Sie eine Aufgabe ausführen. Als Tipp können Sie den Speicher in Ihrer Hauptfunktion zuweisen und dann den Zeiger an die readNumbers-Funktion übergeben. Auf diese Weise bleibt es im selben Umfang und es ist einfacher zu verwalten. Ebenso, wie Sie die Länge des Arrays an die Funktion printnumbers übergeben, sollten Sie es an die readnumbers eins übergeben, anstatt es hart zu codieren.