プログラムがメモリを正しく割り当てているかどうかを確認しようとしています -
だから私はさまざまなタイプの一連のポインタを持っています、
pData1 = 0x844c458 ( malloc(5 * (double*) のサイズ) の結果)
pData2 = 0x844c470 (malloc の結果((double ) の 10 サイズ));
pData3 = 0x844c3a0(malloc(44 * サイズ 0f (double*)) の結果);
pData4 = 0x844c358
だから私はダブル= 8バイト、5 * 8 = 40バイトだと思います。これは、最初の2つのアドレスが重複し、同様に最後の2つが重複することを意味しますか?
無料で無効になっているため、コードのメモリ破損を調査しているため、これが発生している場所を見つけようとしています。
-----編集 ------- コード詳細の追加
これは構造体です -
struct _ELEMENT
{
short s;
char arr[20];
int size;
void *ptr1;
void *ptr2;
}ELEMENT;
Parent と Derived (親の子) の 2 つのクラスがあります。
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 フリーは、最初に親デストラクタから解放されます。このコードは何年もの間、SOLaris で問題なく動作していましたが、Linux に移植するとこの問題が発生します...
ありがとう!