我正在尝试检查我的程序是否正确分配内存 -
所以我有一系列不同类型的指针,
pData1 = 0x844c458(malloc 的结果(5 * (double*) 的大小)
pData2 = 0x844c470(malloc 的结果(10 大小为 (double));
pData3 = 0x844c3a0(malloc(44 * size 0f (double*)) 的结果);
pData4 = 0x844c358
所以我认为 double = 8 bytes , 5 *8 = 40 bytes,这意味着前两个地址会重叠,最后两个地址也会重叠?
我正在获得无效免费,所以我正在调查我的代码中的内存损坏,以便试图找到可能发生这种情况的位置。
-----编辑--------添加代码细节
这是结构体-
struct _ELEMENT
{
short s;
char arr[20];
int size;
void *ptr1;
void *ptr2;
}ELEMENT;
有两个类 Parent 和 Derived(Parent 的 child )
Class Parent
{
protected:
int size;
ELEMENT *ele1;
ELEMENT *ele2;
public:
void func();
...
}
Class Child::public Parent
{
int a,b,c;
}
Parent::Parent()
{
ele1 = NULL;
ele2= NULL;
}
Parent::~Parent()
{
for (int i =0; i< size; i++)
{
free(ele1[i].p1);
free(ele2[i].p1);
}
free(ele1);
free(ele2);
}
Child::Child()
{
a=0;...
}
Child::~Child()
{
for (int i =0; i< size; i++)
{
free(ele1[i].p1);
free(ele2[i].p1);
}
free(ele1);
free(ele2);
}
Parent::func ()
{
ele1 = (ELEMENT*)malloc (n * sizeof(ELEMENT));
ele2 = (ELEMENT*)malloc (n* sizeof(ELEMENT));
for (int i =0; i <somenumber; i++)
{
...some processing...
ele1[i].size = n;
ele2[i].size = x;
ele1[i].p1 = malloc (ele1[i].size);
ele2[i].p1 = malloc(ele2[i].size);
}
}
main ()
{
Parent *p;
CHild *c;
p = new Parent();
c= new Child();
p->func();
c->func();
delete(p);
delete(c);
}
_glibc:invalid free 首先从父析构函数中释放出来。这段代码多年来在 SOlaris 中运行良好,但将其移植到 Linux 中却出现了这个问题...
谢谢!
最佳答案
您的问题的答案是您的程序正在正确分配内存,您遇到的第一个问题是您不知道数据类型的大小,因此您的计算不正确。
如果您愿意发布您的代码和您遇到的实际错误,我们可能可以解决这个问题。事实上,无法回答 invalid free
的深层问题。
它可能与谁有关,这是一个答案还是一个评论?
关于linux - linux中的地址分配: possible over lap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15395187/