我正在尝试检查我的程序是否正确分配内存-
所以我有一系列不同类型的指针,
pData1 = 0x844c458 ( malloc 的结果 (5 * size of (double*))
pData2 = 0x844c470 (malloc 的结果 ( (double) 的 10 大小));
pData3 = 0x844c3a0(malloc的结果(44 * size 0f (double*));
pData4 = 0x844c358
所以我认为 double = 8 个字节,5 *8 = 40 个字节,这意味着前两个地址将重叠,最后两个地址也类似?
我越来越无效了,所以我正在调查我的代码中的内存损坏,以便找出可能发生这种情况的位置。
-----编辑 -------- 添加代码细节
这是结构 -
struct _ELEMENT
{
short s;
char arr[20];
int size;
void *ptr1;
void *ptr2;
}ELEMENT;
有两个类 Parent 和 Derived(Parent 的子级)
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 中会出现此问题...
谢谢!