#include <stdio.h>
#include <stdlib.h>
typedef struct Mystruct {
int chunk[ 8 ] ;
struct Mystruct * next;
struct Mystruct * prev;
} Mystruct;
typedef struct {
Mystruct * first;
Mystruct * last;
} Container;
int main ( void )
{
// We create the list
Container
* container
= ( Container
* ) malloc ( sizeof ( Container
* ) ) ; container
-> first
= ( Mystruct
* ) malloc ( sizeof ( Mystruct
* ) ) ; container-> last = container-> first;
container-> first-> next = NULL;
container-> first-> prev = NULL;
// Now let's check the adresses
printf ( "In main we've got \n container->first: %p \n container->last %p \n \ container: %p\n \n ", container-> first, container-> last, container) ;
// We try to update a value of chunk[0]
* ( container-> first-> chunk) = 5 ;
// And get corrupted pointers
printf ( "In main after change we've got \n container->first: %p \n container->last %p \n \ container: %p\n ", container-> first, container-> last, container) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IE15c3RydWN0IHsKICBpbnQgY2h1bmtbOF07CiAgc3RydWN0IE15c3RydWN0ICpuZXh0OwogIHN0cnVjdCBNeXN0cnVjdCAqcHJldjsKfSBNeXN0cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICBNeXN0cnVjdCAqZmlyc3Q7CiAgTXlzdHJ1Y3QgKmxhc3Q7Cn0gQ29udGFpbmVyOwoKCmludCBtYWluICh2b2lkKQp7CiAgLy8gV2UgY3JlYXRlIHRoZSBsaXN0CiAgQ29udGFpbmVyICpjb250YWluZXIgPSAoQ29udGFpbmVyKikgbWFsbG9jKHNpemVvZihDb250YWluZXIqKSk7CiAgY29udGFpbmVyLT5maXJzdCA9IChNeXN0cnVjdCopIG1hbGxvYyhzaXplb2YoTXlzdHJ1Y3QqKSk7CiAgY29udGFpbmVyLT5sYXN0ID0gY29udGFpbmVyLT5maXJzdDsKCiAgY29udGFpbmVyLT5maXJzdC0+bmV4dCA9IE5VTEw7CiAgY29udGFpbmVyLT5maXJzdC0+cHJldiA9IE5VTEw7CgogIAogIC8vIE5vdyBsZXQncyBjaGVjayB0aGUgYWRyZXNzZXMKICBwcmludGYoIkluIG1haW4gd2UndmUgZ290IFxuY29udGFpbmVyLT5maXJzdDogJXAgXG5jb250YWluZXItPmxhc3QgJXAgXG5cCmNvbnRhaW5lcjogJXBcblxuIiwgY29udGFpbmVyLT5maXJzdCwgY29udGFpbmVyLT5sYXN0LCBjb250YWluZXIpOwoKCgogIC8vIFdlIHRyeSB0byB1cGRhdGUgYSB2YWx1ZSBvZiBjaHVua1swXQogICooY29udGFpbmVyLT5maXJzdC0+Y2h1bmspID0gNTsKCgoKICAvLyBBbmQgZ2V0IGNvcnJ1cHRlZCBwb2ludGVycwpwcmludGYoIkluIG1haW4gYWZ0ZXIgY2hhbmdlIHdlJ3ZlIGdvdCBcbmNvbnRhaW5lci0+Zmlyc3Q6ICVwIFxuY29udGFpbmVyLT5sYXN0ICVwIFxuXApjb250YWluZXI6ICVwXG4iLCBjb250YWluZXItPmZpcnN0LCBjb250YWluZXItPmxhc3QsIGNvbnRhaW5lcik7CgogIHJldHVybiAwOwp9