在std::swap和memcpy之后释放内存
Free memory after std::swap and memcpy
我有以下代码:
Data* t = (Data*)(malloc(len_part_ * sizeof(Data)));
memcpy(t, data_[i], len_temp_ * sizeof(Data));
std::swap(t, data_[i]);
free(t);
问题是在free(t)
中有时发生"堆已损坏"错误。在这些时候,参数是:
sizeof(Data) = 8;
len_part_ = 24;
len_temp_ = 8;
信息:data_
字段为Data**
, Data
定义为typedef std::pair<int,int> Data;
您只能将从malloc
返回的内容准确地传递给free
。你的代码没有显示data[i]
来自哪里,但我敢打赌它不是malloc
。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 释放错误后堆使用
- G锁定铸造到基础上会释放模拟行为
- 在类定义之后定义一个私有方法
- 在将变量声明为引用时,堆在释放后使用
- 在循环C++中指定字符串之后,不会打印该字符串
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- C++宏忽略之后的内容
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- strncpy之后的char数组的错误行为
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 计算十进制 c++ 之后的数字
- C++双重释放或损坏(out)
- "x += x--"之后的 x 是什么?
- 在 wcsncpy 之后释放字符串会导致堆损坏
- 在释放了所有作用域内指针之后仍然可访问内存
- C++,libxslt:在释放样式表之后释放样式表文档会导致崩溃
- 如果我在 for 中声明一个对象,它的内存是否会在那之后被释放?
- 在std::swap和memcpy之后释放内存
- 在显式销毁对象之后但在其内存被释放之前调用成员函数是否合法?