C++ 为什么我的指针会导致segfault? #包括 #包括 #包括 #包括 使用名称空间std; 结构学生 { 字符名[50]; 字符名称[50]; int-id; 浮动GPA; }; void toAdd(向量*plist); void toDelete(向量*plist); void toPrint(向量*plist); int main(){ 向量表; 向量*plist=&list; 字符输入[80]; bool running=true; while(running==true){ cout

C++ 为什么我的指针会导致segfault? #包括 #包括 #包括 #包括 使用名称空间std; 结构学生 { 字符名[50]; 字符名称[50]; int-id; 浮动GPA; }; void toAdd(向量*plist); void toDelete(向量*plist); void toPrint(向量*plist); int main(){ 向量表; 向量*plist=&list; 字符输入[80]; bool running=true; while(running==true){ cout,c++,pointers,vector,segmentation-fault,C++,Pointers,Vector,Segmentation Fault,Seg故障通常是在尝试访问不允许的内存位置区域(读取或写入)时引起的。在下面的一行中,toAdd()方法中: stu->name,其等效于:(*stu)。name正在尝试取消引用未初始化的指针 此外,建议使用智能指针(原始(常规)指针的包装器),因为它允许您更有效地管理分配给该指针的内存。您可以选择唯一或共享智能指针。您取消引用未初始化的指针。在调用 cin.getline(stu->name,20); 您需要首先使用new cin.getline(stu->name,20);

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

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


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

您取消引用未初始化的指针。在调用

cin.getline(stu->name,20);
您需要首先使用
new

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

你不需要那么多星星。喜欢字符串而不是字符数组。你为什么要使用指针?
添加
取消对未初始化指针
stu
的引用,这样你的程序就会表现出未定义的行为。因为它们不指向任何东西?一:不需要
plist
,了解引用。二:不需要d将指向你的结构的指针存储在向量中。三:了解。四:了解。五:要么开始在课堂上集中注意力,要么。你是对的,但你应该解释为什么程序存在根本性缺陷,可以重写为简短的,甚至不使用这种技术。糟糕的建议。这种方法会导致内存泄漏短命令。该方法应该只返回一个
学生
,然后OP需要确保在使用
plist
时正确释放内存,至少使用
std::unique_ptr
,但实际上不需要指针。@AluanHaddad问题不是是否需要指针。问题是为什么pointer不起作用。即使有其他可用的工具,人们仍然需要学习如何使用指针。
cin.getline(stu->name,20);
student* stu = new student;