#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;
}
给我以下错误:
*** Error in `./out': munmap_chunk(): invalid pointer: 0x0000000000400824 ***
我的问题是,是否甚至有必要删除面包->名称,或者删除面包是否会为我解决。如果有必要删除Bread-> name,为什么在尝试执行该操作时程序会崩溃?
最佳答案
问题实际上出在这里:
bread->name = "bread";
在为
name
分配了一个新数组之后,您正在将该指针分配给一个完全不同的值-一个恰好位于只读内存中的值。因此,删除它时会出现错误:您正在尝试对未分配的数组进行delete []
。关键问题是,您不想分配指针
name
,而是要填充刚分配的数组的内容-您想填充name
指向的内容。为此, strcpy
:strcpy(bread->name, "bread");
或者说真的,因为这是C++:
struct Product {
std::string name;
float price;
};
Product bread;
bread.name = "bread";