Ian*_*ing 1 c++ memory-management
#include <cstring>
using namespace std;
struct Product {
char * name;
float price;
};
int main() {
Product * bread = new Product;
bread->name = new char[6];
bread->name = "bread";
delete[] bread->name; //!!!THE ERROR OCCURS ON THIS LINE!!!
delete bread;
}
Run Code Online (Sandbox Code Playgroud)
给我以下错误:
*** Error in `./out': munmap_chunk(): invalid pointer: 0x0000000000400824 ***
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否有必要删除面包 - >名称,或者删除面包将为我处理.如果有必要删除bread-> name,为什么程序在我尝试时会崩溃?
问题实际上源于此:
bread->name = "bread";
Run Code Online (Sandbox Code Playgroud)
在为一个新数组分配之后name,您将该指针分配给一个完全不同的值 - 一个恰好存在于只读内存中的值.因此,当您删除它时出现错误:您正在尝试delete []使用未分配的数组.
关键问题是你不想分配指针 name,你想填充刚分配的数组的内容 - 你想填充name 指向的内容.为此,strcpy:
strcpy(bread->name, "bread");
Run Code Online (Sandbox Code Playgroud)
或者真的,因为这是C++:
struct Product {
std::string name;
float price;
};
Product bread;
bread.name = "bread";
Run Code Online (Sandbox Code Playgroud)