C++ 如何清除为';在C++;?
在您阅读我的代码之前,我希望每个人都知道我没有在任何地方使用我的代码,这就是为什么它没有太多注释的原因。这只是我写的一个例子来问这个问题,它按照我想要的方式工作。请随便试用 我有一个关于删除功能的问题。删除[]pTemp->TOP3成绩;是否实际删除/释放所有数组项?它知道在3个元素之后停止吗?怎么用?如果内存中的某些数据与前3个数据可能是相同的数据(或相同类型的数据),该怎么办?3是否秘密地传递到delete函数中,以便它知道何时停止?还是只删除第一个元素pTemp->top3Grades[0] 如果可能的话,我如何检查它是否被删除?我使用XCode,如果有帮助的话,它附带了一个调试器C++ 如何清除为';在C++;?,c++,memory-management,linked-list,free,C++,Memory Management,Linked List,Free,在您阅读我的代码之前,我希望每个人都知道我没有在任何地方使用我的代码,这就是为什么它没有太多注释的原因。这只是我写的一个例子来问这个问题,它按照我想要的方式工作。请随便试用 我有一个关于删除功能的问题。删除[]pTemp->TOP3成绩;是否实际删除/释放所有数组项?它知道在3个元素之后停止吗?怎么用?如果内存中的某些数据与前3个数据可能是相同的数据(或相同类型的数据),该怎么办?3是否秘密地传递到delete函数中,以便它知道何时停止?还是只删除第一个元素pTemp->top3Grades[0
#include <iostream>
using namespace std;
struct Students{
int idNum;
int age;
Students* pNext;
int* top3Grades;
};
void deleteAllStudents(Students* *head){
Students* pTemp = *head;
while (pTemp!=NULL) {
*head = pTemp->pNext;
delete[] pTemp->top3Grades; //Does this eliminate all 3 elments
//or just the first? How would you
//check if it is?
delete (pTemp); //Might as well ask...how I can see
//this was deleted/freed up?
pTemp=*head;
}
}
void addStudent(Students* *head, int id, int age, int grade1, int grade2, int grade3){
Students* studentEntry= new Students;
studentEntry->top3Grades= new int[3]; // Yes I could have set this as static when
// defining it in struct up above, but
// this way is related to my question later
studentEntry->top3Grades[0] = grade1;
studentEntry->top3Grades[1] = grade2;
studentEntry->top3Grades[2] = grade3;
studentEntry-> idNum = id;
studentEntry-> age = age;
studentEntry->pNext=NULL;
Students* pTemp;
pTemp = *head;
if (*head==NULL) {
*head = studentEntry;
} else{
while (pTemp->pNext!=NULL) {
pTemp= pTemp->pNext;
}
pTemp-> pNext= studentEntry;
}
}
void dispalyAllStudents(Students* *head){
Students* pTemp;
pTemp = *head;
while (pTemp!=NULL) {
cout<<"ID #: "<<pTemp->idNum<<" Age: "<<pTemp->age<<endl;
cout<<"Best grades are "
<<pTemp->top3Grades[0]<<" "
<<pTemp->top3Grades[1]<<" "
<<pTemp->top3Grades[2]
<<endl<<endl;
pTemp= pTemp->pNext;
}
}
int main()
{
int inputNum, studentID, studentAge, bestGrade1, bestGrade2, bestGrade3;
Students* pHead=NULL;
cout<< "How many records do you want to input? ";
cin >> inputNum;
for (int i = 0; i<inputNum; i++) {
cout<<endl;
cout<<"Enter ID Number: ";
cin>>studentID;
cout<<"Enter age: ";
cin>>studentAge;
cout<<"Enter first best grade: ";
cin>>bestGrade1;
cout<<"Enter second best grade: ";
cin>>bestGrade2;
cout<<"Enter third best grade: ";
cin>>bestGrade3;
addStudent(&pHead, studentID, studentAge, bestGrade1, bestGrade2, bestGrade3);
}
cout<< "--------"<<endl;
dispalyAllStudents(&pHead);
deleteAllStudents(&pHead);
return 0;
}
#包括
使用名称空间std;
结构学生{
int-idNum;
智力年龄;
学生*pNext;
国际*前三名;
};
无效删除所有学生(学生**头){
学生*pTemp=*头;
while(pTemp!=NULL){
*head=pTemp->pNext;
删除[]pTemp->top3Grades;//这会消除所有3个元素吗
//还是第一次?你会怎么做
//看看是不是?
delete(pTemp);//不妨问问……我怎么看
//这是否已被删除/释放?
pTemp=*头;
}
}
void addStudent(学生**负责人、内部id、内部年龄、内部一年级、内部二年级、内部三年级){
学生*学生中心=新生;
studentEntry->top3Grades=new int[3];//是的,当
//在上面的struct中定义它,但是
//这与我稍后的问题有关
学生入学->前三名成绩[0]=一年级;
学生入学->前三名成绩[1]=二年级;
学生入学->前三名成绩[2]=三年级;
studentry->idNum=id;
学生中心->年龄=年龄;
studentry->pNext=NULL;
学生*pTemp;
pTemp=*头;
如果(*head==NULL){
*人头=学生人数;
}否则{
while(pTemp->pNext!=NULL){
pTemp=pTemp->pNext;
}
pTemp->pNext=学生进入;
}
}
无效争议学生(学生**负责人){
学生*pTemp;
pTemp=*头;
while(pTemp!=NULL){
coutYes,delete[]
知道如果您将调用new[]
返回的指针传递给它,那么有多少个元素。在您的代码中,您基本上有:
int * p = new int[3];
// ...
delete [] p;
这正是它设计的目的
这是怎么做的?这不是你的事。就目前的例子来说,在C++的标准标准IATIAI ABI中,没有任何事情可做,你基本上在底层内存上调用了一个“代码>自由”(/CODE)的调用。如果数组元素的类型不是简单的可破坏的,编译器需要将数组元素的数量存储在某个“隐藏”位置(安腾ABI指定的位置),以便调用所有的析构函数。
这可能是或的重复