richmond 13.08.2012 20:53 Ноут

Часто замечал в трейсах что что-то указывает на адресс 0x10, вопрос такой, что это такое, почему 0x10 и как, в теории, с этим бороться?

с++, ?
1. ulidtko 13.08.2012 20:54 lunatic asylum

это на 32 битах (void*)NULL + 4.

2. richmondulidtko /1 13.08.2012 20:54

но это я замечал в основном на серверных машинках, т.е. 64бита. При этом, достаточно часто.

3. ulidtkorichmond /2 13.08.2012 20:55 lunatic asylum

тогда (void*)NULL + 2
>___>

4. richmondulidtko /3 13.08.2012 20:56

а что это собственно значит? как добиться такого указателя к примеру написав заведомо ошибочный код?

5. ulidtkorichmond /4 13.08.2012 20:57 lunatic asylum

struct T { int a; int b; int c; };

T* test = NULL;
test→c;

6. ulidtkoulidtko /5 13.08.2012 20:59 lunatic asylum

например. Ну или так:

class T {
int _wrapped;
public:
void* call() { return this; };
};

// ...
T* test = NULL;
test.call();

7. ulidtkoulidtko /6 13.08.2012 20:59

бля, я хуй, там vtable нужно. Ну энивей, you get the idea.

8. richmondulidtko /7 13.08.2012 21:03

но данная штука определенно была указателем на объект и несла адрес 0x10. Ни первый, ни второй код этого не добился. КАК?

9. ulidtkorichmond /8 13.08.2012 21:09

struct composited {
int content;
};

class A {
int64 a;
int64 b;
composited c;
};

A* test = NULL;
test→c.content; // segfault at 0x10

Do you really want to delete ?