【发布时间】:2020-10-11 22:18:12
【问题描述】:
我有一个程序通过结构接收信息并将其放入向量中,我试图将这些信息打印出来,而是获取一个地址。该结构应该正确地保存值,所以我认为它要么是我的指针,要么是我打印出来的方式。
#include <iostream>
#include <cstring>
#include<vector>
using namespace std;
struct student
{
char* fName;
char* lName;
int id;
float gpa;
};
void add(vector<student*>*);
int main()
{
vector <student*>* list = new vector<student*>();
if (strcmp(cmd,"ADD") == 0)
{
add(list);
}
else if (strcmp(cmd,"PRINT") == 0)
{
for(vector<student*>::iterator i = list->begin(); i != list->end(); i++)
{
cout << *i;
}
cout << "print" << endl;
}
}
void add(vector<student*>* paramlist)
{
student* s = new student();
s->fName = new char[25];
s->lName = new char[25];
cout << "Enter first name" << endl;
cin >> s->fName;
cout << "Enter last name" << endl;
cin >> s->lName;
cout << "Enter id number" << endl;
cin >> s->id;
cout << "Enter GPA" << endl;
cin >> s->gpa;
paramlist->push_back(s);
}
或者它可能与我遍历向量的方式有关。
【问题讨论】:
-
您可能需要阅读此官方帮助页面,以了解为什么您的问题至少收到了一个反对票(不是来自我):How to create a minimal reproducible example
-
你为什么要使用指针?您应该简单地使用
std::vector<student>而不是std::vector<student*>*和std::string而不是char*。这将立即使您的代码更简单、更安全并且没有内存泄漏 -
很多额外的不应该出现的新表达式,这种风格会产生内存泄漏
-
@alterigel 对不起,这是一个学校项目,我必须使用指针。
-
@FaizanKarim
vector<student*>表示灾难,因为该向量不会释放分配给学生的内存,并且显然student不会释放字符串。void add(vector<student*>* paramlist)不是 C++ 方式,除非您需要对指针进行操作,否则将是void add(vector<student*>& paramlist)