为什么此代码不以C++分配内存
Why this code doesnt allocate memory in C++?
这是书籍类
//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;
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 正在尝试重载二进制搜索树分配运算符
- GlobalAlloc而不是其他分配方法
- 自定义先决条件对移动分配运算符有效吗
- 我可以重新分配/覆盖std::字符串吗
- 在c++中使用动态分配的问题
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 为什么我可以使用比分配的内存更多的内存
- 使用RAII在给定次数的迭代后重新分配资源