2016-01-04 5 views
0

Я пытаюсь выделить новый массив, если целые числа (см. Раздел HwGrades ниже) Когда я помещаю HwNum = 2, новая функция создает только массив размером 1! и когда для итерации цикла 2 раза оно не дает мне нарушение прав доступа помощи буду признателен ..Размер массива int C++

Вот конструктор

EE_Course::EE_Course(int Course_ID, char * Course_Name, int Hw_Num, double Hw_Weigh,int Factor_) 
    { 
     CourseID = Course_ID; 
     CourseName = new char[strlen(Course_Name) + 1]; 
     strcpy(CourseName, Course_Name); 
     HwNum = Hw_Num; 
     HwWeigh = Hw_Weigh; 
     HwGrades = new int [HwNum]; // STARTING FROM HERE 
     for (int i = 0; i < Hw_Num; i++) { //UNTIL HERE 
      HwGrades[i] = 0; 
     } 
    Factor_ = 0; 
    ExamGrade = 0; 

} 

И те классовые курсов частной переменные:

protected: 
    int CourseID; 
    int HwNum; 
    char* CourseName; 
    double HwWeigh; 
    int ExamGrade; 
    int* HwGrades; 

}; 
+2

Откуда вы знаете размер 1? – seleciii44

+2

Любая причина, по которой вы не можете использовать std :: vector? Это упростит ситуацию. – Bathsheba

+0

@ seleciii44 из окна «Часы» –

ответ

8

Отладчик не отображает весь массив, если он является указателем. Он показывает адрес массива и первый элемент, который указывает массив. Таким образом, в коде нет ничего плохого.

Вы могли видеть его, если он был определен как массив:

int HwGrades[100]; 

Если вы действительно хотите использовать указатель и увидеть его содержание, у вас есть два варианта:

  1. определить его как массив, отлаживать его, исправить/проверить ваш код и вернуться к указателю.

  2. Я не знаю, какая у вас среда, но обычно есть опция просмотра памяти. Вы можете проверить, что находится в массиве в любое время. Просто откройте представление памяти вашей среды IDE и посмотрите адрес указателя.

EDIT:

Видимо есть третий (и лучший) вариант. См. Rabbi Shuki's answer.

5

Отладчик показывает только один элемент. Вот почему:

Тип HwGrades: int*. Итак, когда вы показываете содержимое HwGrades, что должен делать отладчик? Отладчик не знает, что указатель фактически указывает на первый элемент массива. Предполагается, что он просто указывает на int. Поэтому отладчик показывает только первый элемент массива, который на самом деле имеет размер 2.

Если вы используете отладчик Visual Studio, вы можете написать HwGrades,2 в окне просмотра, чтобы увидеть первые два элемента массива , Замените 2 тем, что щекочет ваше воображение. ;)

Однако, как правило, я бы настоятельно советовал использовать контейнер STL std::vector для динамических массивов. Программа будет проще программировать, и отладчик будет вашим другом без хлопот.

+0

Wow! Я ценю это объяснение. Спасибо. –

+0

@SijaanHallak Добавил несколько подсказок для вас. ;) –

1

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

I.E.

HwGrades, 2 
+0

Как изменить имя в окне просмотра? –

+0

Мне это удалось! И это работает .. спасибо :) –

+0

@SijaanHallak Приятно слышать. Я был бы признателен, если бы вы могли проголосовать за ответы, которые вам помогли, так как я довольно новичок в этом сайте и мне нужна моя репутация. –

Смежные вопросы