В настоящее время я пытаюсь создать динамический массив структур студентов. Единственная проблема в том, что я получаю много ошибок, слишком много, чтобы рассчитывать, когда я пытаюсь скомпилировать. Я думал, что я удаляю всю память, которую я использую.Я не думаю, что правильно разрушаю динамическую память
Ввод программы - сколько учеников и сколько оценок, затем я динамически создаю массив в соответствии с тем, сколько классов они хотят и сколько студентов есть.
Выход должен быть напечатан только для каждого ученика и класса, но я не думаю, что у меня возникнут проблемы с этим, динамическая память - это та часть, которую я не понимаю.
// Filename: pointers.cpp
#include <string.h>
#include <iostream>
#include <sstream>
using namespace std;
struct Student
{
string name;
int id;
int* mark;
~Student()
{
delete [] mark;
mark = NULL;
};
};
void initStudent(Student* ptr, int markNum, int studentNum); // function prototype for initialization
void sayStudent(Student* ptr, int markNum); // function prototype for printing
//*********************** Main Function ************************//
int main()
{
int mark, studentNum;
Student stu; // instantiating an STUDENT object
Student* stuPtr = &stu; // defining a pointer for the object
cout << "How many marks are there? ";
cin >> mark;
cout << "How many students are there?";
cin >> studentNum;
Student* students = new Student[studentNum];
initStudent(&stu,mark,studentNum); // initializing the object
sayStudent(&stu,mark,studentNum); // printing the object
delete [] students;
return 0;
} // end main
//-----------------Start of functions----------------------------//
void initStudent(Student* ptr, int markNum, int studentNum)
{ ptr -> mark = new int[markNum];
cout << "Enter Student Name :";
cin >> ptr -> name;
cout << "Enter Student ID Number :";
cin >> ptr -> id;
for (int i = 1; i <= markNum; i++)
{
cout << "Please enter a mark :";
cin >> ptr -> mark[i-1];
}
}
void sayStudent(Student* ptr, int markNum)
{
cout << "Student info:"<< endl ;
cout << "Name: " << ptr -> name << endl;
cout << "Id:" << ptr -> id << endl;
for (int i = 0; i < markNum; i++)
{
cout << "Mark " << i << ": " << ptr -> mark[i] << endl;
}
}
Как насчет того, чтобы начать, указав первую ошибку? Если это не компиляция, это происходит не потому, что вы не освобождаете память - это происходит во время выполнения. –
Утечки памяти не должны отображаться во время компиляции, вы имеете в виду исключения во время выполнения? – cehnehdeh
'void sayStudent (Student * ptr, int markNum,)' <==, который даже не будет компилироваться. Обратите внимание на завершающий символ ','. Также не будет 'cin << studentNum' по нескольким причинам. – WhozCraig