linux - linux中的地址分配: possible over lap?

标签 linux memory overlapping

我正在尝试检查我的程序是否正确分配内存 -

所以我有一系列不同类型的指针,

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/

相关文章:

algorithm - 优先处理重叠的日期范围

php - 代码注入(inject)有助于在 Linux 上搜索和替换

c# - 序列化对于对象大小估计可靠吗?

c++ - 为什么 C++ 函数可以创建可变长度的数组?

mysql - 确保 cron 作业不会重复执行相同的作业

python - 重叠模式的正则表达式

linux - 设置 debconf 以非交互方式运行的方法?

c - 通过文件描述符 (fd) 而不是文件名来区分/比较两个文件

php - 如何在当前路径 linux 上提取 rar?

powershell - 找出进程正在使用的内存