为什么此代码不以C++分配内存

Why this code doesnt allocate memory in C++?

本文关键字:C++ 分配 内存 代码 为什么      更新时间:2023-10-16

这是书籍类

//book.h
#include<iostream>
class Book
{
public:
int _isbn;
};

这是书单类

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

主.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]中更改某些内容?

为指向Book的指针分配内存。您需要为指针指向的 Book 分配内存。

_list = new Book*[limit]
for (int i = 0; i < limit; ++i) {
   _list[i] = new Book;
}

这修复了代码中的错误,但您确定要这样做吗?如果您需要一个简单的 Book 动态数组,std::vector<Book>就是您的最佳选择。

显然,作为一项规则,每个new都必须伴随着一个delete,每个new[]都必须伴随着一个delete[] - 以免内存泄漏。

// this goes into the destructor
for (int i = 0; i < limit; ++i) {
   delete _list[i]; 
}
delete[] _list;