我试图在整数时分配一个新数组(参见下面的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;
};
答案 0 :(得分:8)
如果调试器是指针,则它不会显示整个数组。它显示了数组的地址和数组指向的第一个元素。所以你的代码没有任何问题。
如果它被定义为数组,你可以看到它:
int HwGrades[100];
如果你真的想使用指针并查看它的内容,你有两个选择:
将其定义为数组,调试它,修复/验证您的代码并转回指针。
我不知道你的环境是什么,但通常都有一个内存视图选项。您可以随时查看阵列中的内容。只需打开IDE的内存视图并查看指针的地址即可。
修改强>:
显然有第三种(也是最好的)选择。请参阅Rabbi Shuki's answer。
答案 1 :(得分:5)
调试器只显示一个元素。原因如下:
HwGrades
的类型为int*
。那么当显示HwGrades
的内容时,调试器应该做什么?调试器不知道指针实际指向数组的第一个元素。它假设它只指向int
。因此,调试器只显示实际大小为2的数组的第一个元素。
如果您使用的是Visual Studio调试器,则可以在监视窗口中编写HwGrades,2
以查看该数组的前两个元素。将2
替换为您喜欢的任何内容。 ;)
但是,通常我强烈建议将STL容器std::vector
用于动态数组。它将更容易编程,调试器将成为你的朋友,没有麻烦。
答案 2 :(得分:1)
如果要在监视屏幕中查看阵列的下一个单元格,可以输入名称并添加逗号和要查看的单元格数。
即
HwGrades, 2