C ++ на Qt создатель: отладчик не показывает статические элементы массива

728
Floella

Я использую Qt Creator и клянусь, я видел, как раньше отображались элементы статического массива. Я не припоминаю обновления IDE, компилятора, отладчика или чего-либо еще, поэтому я не уверен, что происходит. Я пробовал два известных мне способа отображения элементов массива, но ни один из них не работает.

У меня есть такая структура:

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

а затем статический массив, как это:

Student students[100]; 

который я заполняю тестовыми данными в этой функции:

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

Так что у меня также есть эта функция, чтобы найти конкретный элемент в массиве:

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 ""; } 

и я исследую данные во время их выполнения, но я попытался добавить «10» в оценщик выражений, чтобы показать первые 10 элементов в массиве, но я отображаю только первый элемент, а некоторые элементы отображают как указатели ... first method

Также попытался добавить новый оценщик выражений, такой как: Student [10] студентов ( имя переменной [элементы, которые я хочу просмотреть] имя переменной ), но на этот раз он даже не распознает мой массив: second method

Конечно, данные правильно хранятся в массиве, и программа работает нормально, только отладчик не показывает данные правильно.

Я помню, как использовал оба метода в прошлом и видел, как они работают ... Что мне здесь не хватает? Это мои настройки отладки: settings 1 settings 2

0
Массивы являются указателями на адрес памяти в C ++. Таким образом, каждая запись Student в массиве является указателем на объект Student в массиве. Первая запись - это указатель на адрес в начале массива. Ramhound 7 лет назад 0
Вы не передаете начальный адрес массива своей функции. Таким образом, новый массив создается и затем теряется в памяти. Вы никогда не заполняете исходный массив, который вы создали. ** Ваша проблема - ваш код. **. Это означает, что это больше вопрос SO, так как в вашем коде есть логическая ошибка Ramhound 7 лет назад 0
Вы можете видеть, что это так, потому что адресные пространства памяти между двумя массивами совершенно разные. Да, ваш код работает, но в нем есть логическая ошибка и, вероятно, утечка памяти, связанная с этой ошибкой Ramhound 7 лет назад 0
Должен добавить, что я определил это на основе предоставленных вами небольших фрагментов, и это только то, что я описываю (основываясь на моем собственном опыте работы со структурными массивами C ++ Ramhound 7 лет назад 0
Хм, я сейчас запутался ... Я всегда думал, что статические массивы автоматически передаются по ссылке при использовании в качестве параметров, как указатель на первый элемент массива. Несмотря на это, странно, что некоторые элементы отображаются как имеющие тип «Студент», а другие отображаются как указатели на элементы «Студент» ... Floella 7 лет назад 0
Что должно быть подсказкой, вам нужно разыменовать эти указатели Ramhound 7 лет назад 0
https://stackoverflow.com/questions/7454990/why-cant-we-pass-arrays-to-function-by-value Ramhound 7 лет назад 0

0 ответов на вопрос