gpt4 book ai didi

c++ - 为什么会出现 bad_alloc 错误?

转载 作者:行者123 更新时间:2023-11-30 00:39:40 26 4
gpt4 key购买 nike

目前我正在尝试为 Student 设置一个成员函数,它从 cin 中读取一个字符串,用作该函数的参数,然后使用数据创建一个 Student 对象。但是,它是否给我一个 bad_alloc 错误。我知道该函数正在获取字符串,但在创建新对象后出现此错误。

错误:

./a.out

Please insert name for student:
Bob_Russel
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted

构造函数:

Student::Student(string tname){

name = tname;

}

功能:

Student Student::readStudent(istream &i){

Student *stud;

string y;

i >> y;

stud = new Student(y);

return *stud;

}

testStudent.cpp:

 #include "Student.h"

int main(){

Student *stud3;
cout << "\nPlease insert name for student:\n";

stud3->readStudent(cin);


return 0;

}

最佳答案

不仅代码会泄漏内存(在 readStudent 中创建一个新的 Student 并且永远不会被删除),在 main 中你使用了一个调用 readStudent 的未初始化指针。这可能会破坏您的堆,从而导致对 new 的调用抛出 std::bad_alloc

再看看 C++ 内存管理和对象生命周期。这里真的完全没有必要使用指针。作为起点,您的 main 可以修改为:

int main() {
Student stud3;
std::cout << "Please insert name for student:" << std::endl;
stud3.readStudent(std::cin);
}

如果您在 main 中读取名称(作为 std::string),然后将名称直接传递给 可能会更好>学生构造函数:

int main() {
std::cout << "Please insert name for student:" << std::endl;
// Read in the name.
std::string name;
std::cin >> name;
// Create the student with the input name.
Student stud3(name);
}

关于c++ - 为什么会出现 bad_alloc 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8211846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com