linux - linux中的地址分配:可能超过一圈吗?

原文 标签 linux memory overlapping

我正在检查我的程序是否正确分配内存-
所以我有一系列不同类型的指针,
pData1=0x844c458(malloc的结果(5*size of(double*))
pData2=0x844c470(malloc的结果(10个大小(double));
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;

有两个类父类和派生类(父类的子类)
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首先是父析构函数的free。这段代码在SOlaris中运行了好几年,但是在linux中移植它会导致这个问题。。。
谢谢!

最佳答案

你的问题的答案是你的程序正在正确地分配内存,你的第一个问题是你不知道你的数据类型的大小,所以你的计算是不正确的。
如果你能发布你的代码和你得到的实际错误,我们就有可能解决这个问题。事实上,invalid free这个深层次的问题是无法解决的。
对谁来说,这是一个答案还是一个评论?

相关文章:

c - make有什么问题?

python - 使用Python连接到MySQL数据库时出错

php - 将二进制数组转换为十进制字符串的奇怪行为

android - 如何以编程方式获取Android Memory Monitor值(已分配和免费)?

python - Pygame:Rec对象在For循环中无法正确渲染

linux - 如何在TinyCore上安装VirtualBox Guest Addition

linux - 在Linux上删除当前目录

java - 伊甸园和幸存者保持不变的同时,JVM的老一代不断增长

android - 碎片在后退按钮上重叠

jquery - 导航和内容重叠的方式存在问题