这是Book类
//book.h
#include<iostream>
class Book
{
public:
int _isbn;
};
这是BookList类
//book_list.h
#include"book.h"
class BookList
{
pubblic:
BookList(int limit);
Book** _list;
};
book_list.cpp
#include<iostream>
#include"book.h"
#include"book_list.h"
BookList::BookList(int limit)
{
_list = new Book*[limit]
}
的main.cpp
#include<iostream>
#include"book.h"
#include"book_list.h"
int main()
{
BookList myList(5);
myList._list[1]->_isbn = 4; // here I get the crash
}
为什么我无法改变_list[i]
中的内容?
答案 0 :(得分:5)
为指向Book
的指针分配内存。您需要为指向指针的Book
分配内存。
_list = new Book*[limit]
for (int i = 0; i < limit; ++i) {
_list[i] = new Book;
}
这可以修复代码中的错误,但您确定要这样吗?如果您需要Book
s的简单动态数组,std::vector<Book>
是可行的方法。
显然,作为一项规则,每个new
必须附有delete
,并且每个new[]
必须附有delete[]
- 以便没有记忆泄漏。
// this goes into the destructor
for (int i = 0; i < limit; ++i) {
delete _list[i];
}
delete[] _list;