C++ 无法删除stuct指针(c+;+;)中的指针数组
我这里的语法有问题。我们目前正在课堂上学习结构和指针,任务是创建单个结构的动态数组,其中包含一个指针数组,在程序结束时分配和删除。(希望这是有道理的) 以下是我使用的代码片段,请注意分数输入的工作原理:C++ 无法删除stuct指针(c+;+;)中的指针数组,c++,C++,我这里的语法有问题。我们目前正在课堂上学习结构和指针,任务是创建单个结构的动态数组,其中包含一个指针数组,在程序结束时分配和删除。(希望这是有道理的) 以下是我使用的代码片段,请注意分数输入的工作原理: std::cin << stuArray[i].stuScore[j] 删除代码: do { for (unsigned short j = 0; j < numTests; j++) { delete[] stuArray[coun
std::cin << stuArray[i].stuScore[j]
删除代码:
do
{
for (unsigned short j = 0; j < numTests; j++)
{
delete[] stuArray[count].stuScore[0]; //Syntax???????
}
count++;
} while (count < numStudents);
delete[] stuArray;
do
{
for(无符号短j=0;j
分数输入代码(有效)
bool分数项(学生*stuArray、无符号短numstudent、无符号短numTests)
{
//局部变量
无符号短idTempChoice=0;
//获取身份证号码
std::cout>idtempschoice;
//Id查找
for(无符号短i=0;i std::coutTrydelete[]stuArray[count].stuScore;
不delete[]stuArray[count].stuScore[j];
delete[]
用于删除分配了新类型[n]
您想删除指向内存的指针,而不是实际内存。您可以删除删除[]stuArray[count]。stuScore
但不能删除[]stuArray[count]。stuScore[j]
-drescherjm
固定使用:
do
{
delete[] stuArray[count].stuScore;
count++;
} while (count < numTests);
do
{
删除[]stuArray[count]。stuScore;
计数++;
}而(计数
您已经分配了stuArray[count].stuScore
和new[]
,但不是stuArray[count].stuScore[j]
。只有删除[]
您实际分配的new[]
。您不能删除分配给new的数组的单个元素。您只能删除整个数组。它是“stuArray[i].stuScore=new float[numTests];“不这样做吗?我想这会创建一个新的stuScore数组,这样我就可以用计数器输入数据并用计数器删除?@drescherjm所以如果我要删除stusarray[count]。stuScore就足够了吗?这很有意义,因为我对stusarray做了相同的操作…你可以删除delete[]stuArray[count]。stuScore
但不删除[]stuArray[count]。stuScore[j]
bool ScoreEntry(Student * stuArray, unsigned short numStudents, unsigned short numTests)
{
//Local Variables
unsigned short idTempChoice = 0;
//Get Id Number
std::cout << "\nChoose a student by ID and enter the test scores: ";
std::cin >> idTempChoice;
//Id lookup
for (unsigned short i = 0; i < numStudents; i++)
{
//Id Check
if (idTempChoice == stuArray[i].stuId)
{
std::cout << "Student selected: " << stuArray[i].stuName << std::endl;
//Score Entry
for (unsigned short j = 0; j < numTests; j++)
{
std::cout << "Test " << j + 1 << "'s Score: ";
std::cin >> stuArray[i].stuScore[j];
}//End For Loop j
return true;
}
}//End For Loop i
//Student Id not found
std::cout << "Student not found!\n";
return false;
}
void MemAllocation(Student * &stuArray, unsigned short &numStudents)
{
//Get Number of students
std::cout << "How many students have taken the test: ";
std::cin >> numStudents;
std::cout << std::endl;
//Dynamically allocate pointers
stuArray = new Student[numStudents];
}
for (unsigned short i = 0; i < numTests; i++) //Allocate Dynamic array for each student
{
stuArray[i].stuScore = new float[numTests];
}
do
{
delete[] stuArray[count].stuScore;
count++;
} while (count < numTests);