访问冲突写入位置0x00000000 C ++中的错误

时间:2014-03-31 18:25:34

标签: arrays pointers

我一直在尝试实现库系统代码。但是,每当我尝试将对象传递给数组时,我都会得到

  

访问冲突写入位置0x00000000

Visual Studio 2013中的

错误

这是我的代码 LibrarySystem.cpp

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
    }
}

2 个答案:

答案 0 :(得分:1)

C(和C ++)数组索引基于零。

cout << tempBooks[0].getAuthors();

修改:此外,as others have pointednew Book[bookSize++]看起来很可疑。

答案 1 :(得分:1)

您的数组创建为

有0个条目
Book *tempBooks = new Book[bookSize++];

bookSize++将评估bookSize的当前值,即0。

如果要评估增量后的值,请使用++bookSize