Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法删除stuct指针(c+;+;)中的指针数组_C++ - Fatal编程技术网

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;istd::coutTry
delete[]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);