gpt4 book ai didi

c++ - 有必要删除动态结构内容,然后删除结构本身吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:18:37 26 4
gpt4 key购买 nike

#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 是否会为我解决这个问题。如果有必要删除 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";

关于c++ - 有必要删除动态结构内容,然后删除结构本身吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30292750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com