int数组C ++的大小

时间:2016-01-04 19:40:39

标签: c++ string integer

我试图在整数时分配一个新数组(参见下面的HwGrades分配) 当我把HwNum = 2时,新函数只创建一个大小为1的数组! 当for循环迭代2次时,它不会给我访问冲突 帮助将不胜感激..

这是构造函数

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;

};

3 个答案:

答案 0 :(得分:8)

如果调试器是指针,则它不会显示整个数组。它显示了数组的地址和数组指向的第一个元素。所以你的代码没有任何问题。

如果它被定义为数组,你可以看到它:

int HwGrades[100]; 

如果你真的想使用指针并查看它的内容,你有两个选择:

  1. 将其定义为数组,调试它,修复/验证您的代码并转回指针。

  2. 我不知道你的环境是什么,但通常都有一个内存视图选项。您可以随时查看阵列中的内容。只需打开IDE的内存视图并查看指针的地址即可。

  3. 修改

    显然有第三种(也是最好的)选择。请参阅Rabbi Shuki's answer

答案 1 :(得分:5)

调试器只显示一个元素。原因如下:

HwGrades的类型为int*。那么当显示HwGrades的内容时,调试器应该做什么?调试器不知道指针实际指向数组的第一个元素。它假设它只指向int。因此,调试器只显示实际大小为2的数组的第一个元素。

如果您使用的是Visual Studio调试器,则可以在监视窗口中编写HwGrades,2以查看该数组的前两个元素。将2替换为您喜欢的任何内容。 ;)

但是,通常我强烈建议将STL容器std::vector用于动态数组。它将更容易编程,调试器将成为你的朋友,没有麻烦。

答案 2 :(得分:1)

如果要在监视屏幕中查看阵列的下一个单元格,可以输入名称并添加逗号和要查看的单元格数。

HwGrades, 2