- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有内存问题。我以这种方式使用结构:
包.h 文件
#pragma once
#include <cstdlib>
struct Package {
char *data;
long long int *packageNumber;
long long int *allPackages;
Package(const int sizeOfData);
~Package();
};
#include "Package.h"
Package::Package(const int sizeOfData) {
void *ptr = malloc(2 * sizeof(long long int) + sizeOfData * sizeof(char));
packageNumber = (long long int*) ptr;
allPackages = (long long int*) ((long long int*)ptr + sizeof(long long int));
data = (char*)((char*)ptr + 2 * sizeof(long long int));
}
Package::~Package() {
free(data);
free(packageNumber);
free(allPackages);
}
for (int j = 0; j < this->bufforSize || i * bufforSize + j < allPackages; j++) {
Package package(this->packageSize);
this->file->read(package.data, this->packageSize);
*package.allPackages = allPackages;
*package.packageNumber = i * this->bufforSize + j;
this->dataPacked->push_back(package);
}
"HEAP[zad2.exe]: Invalid address specified to RtlValidateHeap( 00000056FEFE0000, 00000056FEFF3B20 )"
我不知道我做错了什么。请帮忙,迈克尔。
Package::~Package() {
free(packageNumber);
}
最佳答案
阅读 description的 free
:
The behavior is undefined if the value of ptr does not equal a value returned earlier by std::malloc(), std::calloc(), or std::realloc().
void *ptr = malloc(2 * sizeof(long long int) + sizeOfData * sizeof(char));
packageNumber = (long long int*) ptr; // you got this from malloc
allPackages = (long long int*) ((long long int*)ptr + sizeof(long long int)); // the value of this pointer is not equal to anything returned by malloc
data = (char*)((char*)ptr + 2 * sizeof(long long int)); // the value of this pointer is not equal to anything returned by malloc either
free(data); // was not allocated with malloc -> undefined behaviour
free(packageNumber); // was allocated with malloc -> OK
free(allPackages); // was not allocated with malloc -> undefined behaviour
malloc
获得的指针.这会导致未定义的行为。该错误是由于未定义的行为。请意识到
free(packageNumber)
释放用
malloc
分配的整个内存块.这包括
data
指向的内存。和
allPackages
.
free
每次调用
malloc
时,只需一次/
calloc
.同样适用于
delete
+
new
和
delete[]
+
new[]
.
关于c++ - HEAP 错误 指定给 RtlValidateHeap 的地址无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33613246/
我有一个 Windows DLL,它在某一时刻返回一个指向在 DLL 代码中新建的类的指针。该类本身是 DLL 私有(private)的另一个类的非常薄的包装器。 调用可执行文件使用此类没有问题,一切
我有这门课: class HIDValue{ private: void* mValue; UINT mSize; HIDElement mElement; public:
我正在制作一个简单的应用程序,让我可以对集合进行操作。需求是将设置的数据保存在动态数组中。但是,我遇到了一个无法缩小范围的问题。 设置.cpp: #include "stdafx.h" #includ
这是我正在处理的 LinkedList 实现。它适用于任何数据类型,但是当我尝试制作具有链接列表的类型的链接列表时出现问题在使用 visual studio 进行调试时,我得到了指定给 RtlVali
我在我正在处理的 C++ 项目中遇到多态性问题。我有一个名为 State 的基类和一个派生的 TestState 类。我正在尝试从 State 指针调用在派生类中被覆盖的虚函数。调用了虚函数,但是删除
我是一名 C++ 初级程序员。最近,我开始使用 C++ 进行图像处理。我正在尝试定义和使用简单的功能,例如: Matrix MVE(Matrix R) { Matrix *X = P.T();
我有内存问题。我以这种方式使用结构: 包.h 文件 #pragma once #include struct Package { char *data; long long int
我正在编写一个数组类模板,但在使用析构函数时遇到了问题。 #ifndef ARRAY_CPP #define ARRAY_CPP using namespace std; #include #incl
我正在尝试为我的 TurtleProgram 类创建一个重载的 + 运算符,它存储一个动态分配的字符串数组。但是方法返回的时候调用了析构函数,里面的delete操作抛出异常“Invalid addre
我正在编写一个程序来求解随时间变化的磁场的 Bloch 方程。我的磁场值变化范围太大,无法使用简单的 Runge Kutta 方法,但我有一个标准的 4 阶,其步长大小设置为与恒定的均匀磁场一起工作。
我是一名优秀的程序员,十分优秀!