#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";

10-08 19:51