【发布时间】:2016-08-08 00:34:50
【问题描述】:
我目前正在尝试创建学生结构的动态数组。唯一的问题是,当我目前正在尝试编译时,我遇到了很多错误,数不胜数。我以为我正在删除我正在使用的所有内存。
程序的输入是有多少学生和多少年级,然后我根据他们想要多少年级和有多少学生动态创建一个数组。
输出应该只是打印每个学生和年级,但我认为我不应该有麻烦,动态内存是我不理解的部分。
// 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;
}
}
【问题讨论】:
-
你从给出第一个错误开始怎么样?如果它没有编译,那不是因为你没有释放内存——这发生在运行时。
-
编译时不应该出现内存泄漏,你的意思是运行时异常吗?
-
void sayStudent(Student* ptr, int markNum,),。cin << studentNum也不会有几个原因。 -
你的initStudent函数原型与其定义不一致。
-
我建议您对代码进行现代化改造,并开始使用智能指针而不是原始指针,并为动态数组使用 std::vector。你不会有所有这些问题。
标签: c++ arrays memory dynamic destructor