为什么这段代码不能在C ++中分配内存?

时间:2017-04-06 13:12:40

标签: c++

这是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]中的内容?

1 个答案:

答案 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;