0

ポインターと構造体の配列を使用してコードを書いています。コードは次のとおりです。

struct Student_List{
    int roll;
    char name[20];
    int mark1;
    int mark2;
    int mark3;
    struct Student_List *next;
};
struct Student_List *Class[] = { NULL };// to generate student's list for various classes.
struct Student_List *current =NULL;

struct Student_List * check(int rollNo, int classNo)
{

struct Student_List *temp=NULL;
temp=Class[classNo];

while (temp!=NULL) {
    if(temp->rollNo == rollNo)
    {
        //element is found
        return temp;
    }

    temp = temp->next;
}    
if(temp==NULL)
{
    //element not found
    return NULL;
}
//scan serially and if found return address of that node
//if no element found return NULL

}

//add elements to list pointed by Class
struct Student_List * add(char studentName, int rollNo,int classNo)
{
    struct Studen_List *newNode=(struct Student_List *)malloc(sizeof(struct Student_List ));
if (newNode == NULL) {
        printf("malloc failed\n");
        }  

newNode->roll=rollNo;
strcpy(newNode->name,studentName);
newNode->mark1=0;
newNode->mark2=0;
newNode->mark3=0;
struct Student_List *temp = NULL, *previous = NULL;

temp=Class[classNo];
prev = temp;
}

if(temp==NULL)
{
    Class[classNo]=newNode;
    return Class[classNo];


}

while(temp!=NULL)
{
    prev=temp;
    temp=temp->next;
}

prev->next=newNode;
return newNode;
//add node to end of the list
}

void Delete_List(struct Student_List *temp)
{
delete []temp;
//temp = NULL;

/*while(temp!=NULL)
{
    struct Student_List *del=temp;
    temp=temp->next;
    free(del);

}*/
}

int main();
{
int classNo,rollNo,i;
char *name;

printf("\nEnter Class No: ");
scanf("%d",&classNo);
printf("\nEnter Name: ")
gets(name);
printf("\nEnter Roll No: ");
scanf("%d",&rollNo);


current = check(rollNo,classNo);

if(current == NULL){
current = add(name,rollNo,classNo);
}
// others is the marks data fetched from file and calculations.
// this code is enough to reproduce my error.

for(int i=0;i<10;i++)
{
    Delete_List(Class[i]);
}
  return;
}

問題: 値を割り当てて計算を実行すると、結果が正しくありませんでした。デバッグ時に、私Class[3]の開始アドレスが次と同じであることがわかりましたClass[1]->nextRoll->nextRoll;

削除できません。ループを削除するのを手伝ってください。構文や提案に関するヘルプは大歓迎です。

4

1 に答える 1