Sch*_*mer -2 c++ free struct memory-management delete-operator
我在C++代码中有错误的行为,似乎是由于动态创建的结构的错误释放造成的.结构形式如下:
typedef struct
{
char *value;
} Element;
typedef struct
{
int num;
Element **elements;
int *index;
} Container;
Run Code Online (Sandbox Code Playgroud)
它们是这样创建的:
Element *new_element(int size)
{
Element *elem = new Element;
elem->value = new char[size];
return elem;
}
Container *new_container(int num)
{
Container *cont = new Container;
cont->num = num;
cont->elements = new Element*[num];
cont->index = new int[num];
}
Run Code Online (Sandbox Code Playgroud)
解冻这些的正确方法是什么?
您可以通过将资源管理外包给编译器来轻松解决所有释放问题:
#include <cstdlib>
#include <string>
#include <vector>
struct Element {
Element() = default;
explicit Element(std::size_t size) : value(size, '\0') { }
std::string value;
};
struct Container {
explicit Container(std::size_t size) : elements(size), index(size) { }
std::vector<Element> elements;
std::vector<int> index;
};
Run Code Online (Sandbox Code Playgroud)
有关您将来的所有资源管理问题,请参阅"权威C++书籍指南和列表".
归档时间: |
|
查看次数: |
89 次 |
最近记录: |