Arrays C+中的访问冲突写入位置0x00000000错误+;
我一直在尝试实现一个库系统代码。然而,每当我尝试将对象传递给数组时,我都会得到 访问冲突写入位置0x00000000 Visual Studio 2013中出现错误 这是我的密码 LibrarySystem.cppArrays C+中的访问冲突写入位置0x00000000错误+;,arrays,pointers,Arrays,Pointers,我一直在尝试实现一个库系统代码。然而,每当我尝试将对象传递给数组时,我都会得到 访问冲突写入位置0x00000000 Visual Studio 2013中出现错误 这是我的密码 LibrarySystem.cpp static int bookSize = 0; static int studentSize = 0; LibrarySystem::LibrarySystem() { books = NULL; students = NULL; } LibrarySystem:
static int bookSize = 0;
static int studentSize = 0;
LibrarySystem::LibrarySystem()
{
books = NULL;
students = NULL;
}
LibrarySystem::~LibrarySystem()
{
}
void LibrarySystem::addBook(const int bookId, const string name, const string authors, const int year){
bool checkBook = false; //checks whether the book is in the list
Book *tempBooks = new Book[bookSize++];
Book newBook;
if (bookSize == 1) {
newBook.setBookId(bookId);
newBook.setBookName(name);
newBook.setAuthors(authors);
newBook.setYear(year);
}
tempBooks[bookSize - 1] = newBook;
cout << tempBooks[1].getAuthors(); // To testing. This is where execution stops
}
}
static int bookSize=0;
静态int studentSize=0;
LibrarySystem::LibrarySystem()
{
books=NULL;
学生=空;
}
LibrarySystem::~LibrarySystem()
{
}
void LibrarySystem::addBook(常量整数bookId、常量字符串名称、常量字符串作者、常量整数年份){
bool checkBook=false;//检查该书是否在列表中
Book*tempBooks=新书[bookSize++];
新书;
if(bookSize==1){
newBook.setBookId(bookId);
newBook.setBookName(名称);
newBook.setAuthors(作者);
newBook.setYear(年);
}
tempBooks[bookSize-1]=新书;
coutC(和C++)数组索引是基于零的
cout << tempBooks[0].getAuthors();
cout您的数组由
Book *tempBooks = new Book[bookSize++];
bookSize++
将计算为bookSize
的当前值,即0
如果要计算为递增后的值,请使用++bookSize
tempBooks[1]
此时可能未初始化为任何值。您的意思可能是tempBooks[0]
?它不起作用。仍然存在这个错误。每当调用函数时,我都想增加tempBook数组的大小,但tempBook是一个局部变量。您所拥有的没有多大意义。请花点时间编写一个最小的代码示例,即:删除不需要的代码(什么是LibrarySystem?)直到只剩下导致数组的代码为止。例如,我将您的代码缩减为:用于测试它。通常,您会在缩减过程中发现错误。@BurakKantarcı-警告一句:看起来它正常工作,但事实并非如此。您的tempBook
数组是一个局部变量,不会更改,而是在一段时间内创建的我将把它们添加到另一个数组中,书将指向这个数组。这将是我的下一步coding@LeonardoHerrera另外,它会产生内存泄漏。在C++中,您将希望使用<代码> STD::vector < /CODE>为您管理内存管理。@ MICYE这是一个类项目,不幸的是,我被禁止使用vector类。@BurakKantarcı-如果这是一个类项目,那么就有更多的理由使用main()
包括在内,因此人们会倾向于复制和粘贴您的代码,并对其进行修补。一旦您开始这样做,您将得到更好的答案。避免在我们不得不求助于心理调试的地方发布问题!