【发布时间】:2015-02-06 17:28:52
【问题描述】:
我使用 int *studentsAge 存储年龄列表,使用 double *marks[2] 存储每个学生 2 分的列表。
基本上,我不确定如何设置我的constructor 和destructor。
这是我的构造函数...
Students::Students()
{
num = 0;
studentsAge = NULL;
marks[2] = NULL;
}
我在这个函数中使用了两个指针数组...
void Students::storeValues(int num)
{
this->num = num;
studentsAge = new int[num];
for(int i=0; i<num; i++)
{
studentsAge[i] = i;
marks[i] = new double[num]
}
}
这是我的析构函数...
Students::Students()
{
for(int i=0; i<num; i++)
{
delete[] marks[i];
delete[] studentAge[i];
}
delete[] marks;
delete[] studentAge
}
我不确定我的constructor 和destructor 是否正确,我可以怀疑某处存在内存泄漏。我不太擅长指针,但如果有人能告诉我哪里出错了,我将不胜感激
【问题讨论】:
-
我没有看到任何迹象表明
marks是动态分配的。事实上,double *marks[2]声明了一个由两个指针组成的数组,而不是一个指向两个双精度数组的指针。而你的marks[2] = ...调用 undefined d 行为。这个类看起来并不复杂。发布整个内容,包括声明和成员实现。 -
marks[2] = NULL实际上是将越界 0 写入marks的不存在的第三个元素,并且在每个单独的元素上使用delete[]是未定义的行为。 -
@WhozCraig,我很困惑,我以为
double *marks[2]存储了一个2双精度数组,即marks[0][0] = 10.2;marks[0][1] = 8.9;marks[1][0] = 69.0;marks[1][1] = 45.3,还是我错了?如果是这样,我如何声明一个包含2值的动态双精度数组 -
double *marks[2]声明了一个包含两个双精度指针的数组;不是指向两个双精度数组的指针。后者是double (*marks)[2]; -
@WhozCraig 谢谢,那么如何在构造函数中初始化
double marks数组并在析构函数中销毁它?
标签: c++ arrays pointers constructor destructor