C ++ on Qt creator: Debugger zeigt keine statischen Array-Elemente

847
Floella

Ich verwende den Qt-Ersteller und ich schwöre, ich habe schon vorher statische Array-Elemente angezeigt. Ich kann mich nicht erinnern, die IDE, den Compiler, den Debugger oder etwas anderes aktualisiert zu haben, daher bin ich mir nicht sicher, was los ist. Ich habe die zwei mir bekannten Arten ausprobiert, um Array-Elemente anzuzeigen, und keine davon scheint zu funktionieren.

Ich habe eine Struktur wie folgt:

struct Student { int id; string name; string email; long int phone; }; 

und dann ein statisches Array wie folgt:

Student students[100]; 

die ich mit Testdaten in dieser Funktion fülle:

void populateStudents(Student students[], int &size) { students[0]=; students[1]=; students[2]=; students[3]=; size=4; } 

Ich habe also auch diese Funktion, um ein bestimmtes Element im Array zu finden:

string findName(Student students[], int size, int id){ for (int i=0; i!=size; i++){ if (students[i].id==id) return students[i].name; } return ""; } 

Ich untersuche die Daten, während sie ausgeführt werden, aber ich habe versucht, dem Ausdrucksauswertungsgerät "@ 10" hinzuzufügen, um die ersten 10 Elemente im Array anzuzeigen. Ich erhalte jedoch nur das erste Element und einige der Elemente werden angezeigt als Zeiger ... erste Methode

Es wurde auch versucht, einen neuen Ausdrucksauswerter wie folgt hinzuzufügen: Schüler [10] Schüler ( Klassenname [Elemente, die ich anzeigen möchte] Variablenname ), diesmal erkennt sie jedoch nicht einmal mein Array: zweite Methode

Natürlich werden die Daten korrekt im Array gespeichert und das Programm funktioniert einwandfrei. Nur der Debugger zeigt die Daten nicht korrekt an.

Ich erinnere mich daran, dass ich beide Methoden in der Vergangenheit benutzt habe und gesehen habe, wie sie funktionieren ... Was fehlt mir hier? Dies sind meine Debugging-Einstellungen: Einstellungen 1 Einstellungen 2.

0
Arrays sind Zeiger auf eine Speicheradresse in C ++. Jeder Student-Eintrag im Array ist also ein Zeiger auf ein Student-Objekt in einem Array. Der erste Eintrag ist ein Zeiger auf eine Adresse am Anfang des Arrays Ramhound vor 6 Jahren 0
Sie übergeben die Anfangsadresse des Arrays nicht an Ihre Funktion. So wird ein neues Array erstellt und dann im Speicher verwaist. Sie füllen niemals das ursprüngliche Array, das Sie erstellt haben. ** Ihr Problem ist Ihr Code. **. Dies bedeutet, dass dies eher eine SO-Frage ist, da in Ihrem Code ein logischer Fehler vorliegt Ramhound vor 6 Jahren 0
Sie sehen, dass dies der Fall ist, weil die Speicheradressräume zwischen den beiden Arrays völlig unterschiedlich sind. Ja, Ihr Code funktioniert, aber er hat einen logischen Fehler und wahrscheinlich ist ein Speicherverlust mit diesem Fehler verbunden Ramhound vor 6 Jahren 0
Sollte ich hinzufügen, habe ich dies anhand der kleinen Ausschnitte bestimmt, die Sie bereitgestellt haben, und es scheint nur das zu sein, was ich beschreibe (basierend auf meinen eigenen Erfahrungen im Umgang mit C ++ - Strukturarrays) Ramhound vor 6 Jahren 0
Hmm, ich bin jetzt verwirrt ... Ich dachte immer, statische Arrays würden automatisch als Referenz übergeben, wenn sie als Parameter verwendet werden, als Zeiger auf das erste Arrayelement. Es ist jedoch seltsam, dass einige Elemente als "Student" angezeigt werden, während andere als Zeiger auf Student-Elemente angezeigt werden. Floella vor 6 Jahren 0
Was ein Hinweis sein sollte, müssen Sie diese Zeiger dereferenzieren Ramhound vor 6 Jahren 0
https://stackoverflow.com/questions/7454990/why-cant-we-pass-arrays-to-function-by-value Ramhound vor 6 Jahren 0

0 Antworten auf die Frage