gpt4 book ai didi

c++ - 数组因第一个索引而崩溃

转载 作者:行者123 更新时间:2023-11-28 08:04:40 24 4
gpt4 key购买 nike

我刚刚开始使用 C++,但我一直陷入一个非常烦人的问题。一旦我使用动态数组,我就会被卡住。该数组在调试中看起来真的一团糟(看图片),一旦我将更多的一个对象添加到数组中,它就会崩溃。这不是我得到一个特定项目的错误,而是所有使用动态数组的代码,我什至尝试编译老师在本类(class)中制作的代码但没有成功。所以它不太可能是代码问题,但可能是其他问题。但是,为了安全起见,我确实包含了我用来演示这一点的测试代码。 Debug of the code

#include "iostream"
#include "string"
#include "Student.h"
int main()
{
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
string input;
Student **students = NULL;
students = new Student*[20];
for(int i = 0; i < 20; i++)
{
students[i] = new Student();
}
for(int i = 0; i < 20; i++)
{
delete students[i];
}
delete[] students;
return 0;
}



#include "Student.h"
#include "string"

Student::Student()
{
name = "";
number = 0;
}
Student::Student(string Name)
{
name = Name;
number = 0;
}
Student::~Student()
{

}
string Student::getName() const
{
return name;
}



#ifndef STUDENT_H
#define STUDENT_H
#include "string"
#include "Course.h"
using namespace std;
class Student
{
private:
string name;
int number;
public:
Student();
Student(string Name);
virtual ~Student();
string getName() const;
};
#endif

最佳答案

它在调试器中看起来困惑的原因是因为您试图查看 student(您尚未分配,因此内容适当无效)而不是数组 students 。调试器无法显示动态分配的数组。

此外,students = new Student();?这甚至不应该编译,逻辑是绝对错误的。您正在将 Student* 分配给 Student**

作为一般规则,永远不要在您自己的代码中使用 new[]。始终使用 std::vector。然后您将自动构建正确数量的 Student 类,并且永远不会泄漏内存或任何类似的事情。

int main() {
std::vector<Student> students;
string input;
students.resize(20);
// Now you can use ALL THE STUDENTS
return 0;
}

关于c++ - 数组因第一个索引而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10537839/

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