gpt4 book ai didi

c++ - 将项目推送到 STL 容器后出现段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:46 27 4
gpt4 key购买 nike

typedef struct temp  
{
int a,b;
char *c;
temp(){ c = (char*)malloc(10);};
~temp(){free(c);};
}temp;

int main()
{
temp a;
list<temp> l1;
l1.push_back(a);
l1.clear();
return 0;

}

给出段错误。

最佳答案

你没有复制构造函数。

当您将“a”插入列表时,它会被复制。因为你没有复制构造函数(为 c 分配内存并从旧 c 复制到新 c)c 是 a 中的相同指针和列表中 a 的拷贝。

两个 a 的析构函数都被调用,第一个会成功,第二个会失败,因为 c 指向的内存已经被释放。

你需要一个拷贝构造函数。

要查看发生了什么,请在构造函数和析构函数中放置一些 cout,然后单步执行代码。

关于c++ - 将项目推送到 STL 容器后出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/676575/

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