void * und pointer arithmetik

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

void * und pointer arithmetik
Hallo Zusammen,

kann mir jemand sagen warum das “1.” funktioniert und das “2.” nicht, was genau ich falsch mache und wie ich das richtig machen kann.

bei 2. bekomme ich einen segementation fault.

1.******



        void *ret = myBlock->memory;

        struct mblock *at;
	at = ret;
	at--;
	if(at->next == MAGIC){
		printf("UU\n");	
        }

1.******

2.******


void free (void *ret) {
        struct mblock *at;
	at = ret;
	at--;
	if(at->next == MAGIC){
		printf("UU\n");	
	}
}

void *ret = myBlock->memory;
free(ret);

2.******


Es scheint als hätte es damit zu tun, dass die Methode “free” heißt.

Hat jemand schonmal das Problem gehabt?


Ich rate mal und behaupte, du selbst oder irgendeine Bibliotheksfunktion (bspw [m]printf[/m]) ruft [m]free[/m] mit [m]NULL[/m] auf. Was in dem Fall zu tun ist, verrät die die Manpage zu [m]free[/m].


[quote=[hedgehogs dilemma = 42]]
kann mir jemand sagen warum das “1.” funktioniert und das “2.” nicht, was genau ich falsch mache und wie ich das richtig machen kann.
[/quote]
Valgrind kann dir das ganz genau sagen! :slight_smile:


EDIT:

hat sich erledigt