为什么我的指针会导致段错误


#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
  struct student
  {
    char name[50];
    char lname[50];
    int id;
    float GPA;
  };
void toAdd(vector<student*> *plist);
void toDelete(vector<student*>* plist);
void toPrint(vector<student*>* plist);
int main(){
  vector<student*> list;
  vector<student*>* plist = &list;
  char input[80];
  bool running = true;
  while (running == true){
    cout << "What would you like to do?" << endl;
    cin.getline (input,80);
    if(strcmp (input, "ADD") == 0){
      toAdd(plist);
    }
    else if(strcmp (input, "DELETE") == 0){
    }
    else if(strcmp (input, "PRINT") == 0){
    }
    else{
      cout << "That is not a valid response!" << endl;
        }
  }
}
void toAdd(vector<student*> *plist){
  student* stu;
  cout << "What a test!" << endl;
  cout << "First Name: ";
  cin.getline(stu->name,20);
  cout << "Last Name: ";
  cin.getline(stu->lname,20);
  cout << "ID: ";
  cin.getline(stu->id);
  cout << "GPA: ";
  cin.getline(stu->GPA);
  plist->push_back(stu);
}
void toDelete(){
}
void toPrint(){
}

我不明白我做错了什么。我已经浏览了几个小时的代码,真的需要一些帮助。当我运行代码并尝试输入名称时,我收到错误"分段错误(核心转储("。我觉得这可能很简单,但没有任何在线解释对我有帮助。:(

取消引用未初始化的指针。在您致电之前

cin.getline(stu->name,20);

您需要先使用 new 分配其内存

student* stu = new student;

Seg 错误通常是在您尝试访问不允许的内存位置区域(读取或写入(时引起的。在下面的行中,在 toAdd(( 方法中:

cin.getline(stu->name,20);

stu->name 等效于:(*stu(.name 正在尝试取消引用未初始化的指针。

此外,建议使用智能指针(原始(常规(指针的包装器(,因为它允许您更有效地管理为该指针分配的内存。 您可以选择唯一或共享的智能指针。

相关内容

  • 没有找到相关文章

最新更新