gpt4 book ai didi

c++ - 字符串分配的双重释放或损坏错误

转载 作者:行者123 更新时间:2023-11-28 00:31:42 24 4
gpt4 key购买 nike

我这里的字符串赋值有误。这是我们编写的一个函数,用于存储从 url 获取的数据。编辑:数据节点结构

  struct node
{
string url;
std::string* data;
struct node* next;
struct node* prev;
};


void RandomCache::cachePage(string* page_data, string url)
{
datanode *page_node= (datanode*)malloc(sizeof(datanode));
page_node->url = url;
page_node->data = page_data;
page_node->next=NULL;
page_node->prev=NULL;

insertNode(page_node);

}

行 page_node->url = url 导致双重释放或损坏,数据按值传递,而不是按引用传递。谁能指出出了什么问题?

谢谢,我把结构做成了一个类,问题完全解决了。谢谢!但我仍然对此感到疑惑,为什么使用 malloc 进行结构内存管理在 C++ 中是有问题的。结构在 C++ 中使用非常频繁。

最佳答案

Double free or corruption error with string assignment

如果您遇到这些错误中的任何一个,很可能是您的程序遇到了堆内存损坏。

一般来说,堆损坏通常是在您的进程中加载​​的某些 DLL/模块已经发生真正的损坏之后检测到的。因此,很可能是其他一些代码做错了什么,而上面的代码只是一个受害者。因此,我建议您使用一些动态工具来快速了解错误并了解问题发生的位置。根据您的描述,您的程序也可能存在某种内存损坏。

我认为我之前的帖子也可能对解决这个问题有用。如果您的程序是特定于 Windows 的 (WinDBG/PageHeap),您应该会看到以下链接:

https://stackoverflow.com/a/22074401/2724703

如果您的程序是特定于 Gnu/Linux (Valgrind) 的,您应该会看到以下链接:

https://stackoverflow.com/a/22085874/2724703

关于c++ - 字符串分配的双重释放或损坏错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22651884/

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