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

我正在检查我的程序是否正确分配内存-
所以我有一系列不同类型的指针,
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这个深层次的问题是无法解决的。
对谁来说,这是一个答案还是一个评论?

译文:来源   文章分类: linux memory overlapping

相关文章:

c - 使用您自己的页面错误处理程序

linux - 使用AWK删除字段前的空白

linux - 如何为Linux驱动程序和内核开发准备QTCreator

linux - 在共享库中解析符号名称(Linux)

linux - 无法访问Amazon AWS托管的nodeJs项目

linux - 良好的Linux TCP / IP监控工具,不需要root访问权限?

linux - 在AT&T程序集中使用stdin和stdout进行连续读写

linux - 如何在vim中为* .h文件设置语法= cpp

linux - 使用第三方API连接到EC2实例时出错

linux - 如何在Linux Matlab中获取用于矩阵计算的免费交换内存?